home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 32 / Mac Magazin and MacEasy Magazine CD - Issue 32.iso / Grafik & Text / OzTeX3.0 / OzTeX3.0update Folder / amslatex / amsmath.sty (.txt) < prev    next >
LaTeX Document  |  1997-04-01  |  69KB  |  2,153 lines

  1. %% This is file `amsmath.sty',
  2. %% generated with the docstrip utility.
  3. %% The original source files were:
  4. %% amsmath.dtx 
  5. %%% ====================================================================
  6. %%% @LaTeX-file{
  7. %%%   filename  = "amsmath.dtx",
  8. %%%   version   = "1.2d",
  9. %%%   date      = "1997/03/20",
  10. %%%   time      = "16:25:04 EST",
  11. %%%   author    = "American Mathematical Society",
  12. %%%   copyright = "Copyright (C) 1996 American Mathematical Society,
  13. %%%                all rights reserved.  Copying of this file is
  14. %%%                authorized only if either:
  15. %%%                (1) you make absolutely no changes to your copy,
  16. %%%                including name; OR
  17. %%%                (2) if you do make changes, you first rename it
  18. %%%                to some other name.",
  19. %%%   address   = "American Mathematical Society,
  20. %%%                Technical Support,
  21. %%%                Electronic Products and Services,
  22. %%%                P. O. Box 6248,
  23. %%%                Providence, RI 02940,
  24. %%%                USA",
  25. %%%   telephone = "401-455-4080 or (in the USA and Canada)
  26. %%%                800-321-4AMS (321-4267)",
  27. %%%   FAX       = "401-331-3842",
  28. %%%   checksum  = "45539 4982 18193 174456",
  29. %%%   email     = "tech-support@ams.org (Internet)",
  30. %%%   codetable = "ISO/ASCII",
  31. %%%   keywords  = "latex, amslatex, ams-latex, math, amsmath",
  32. %%%   supported = "yes",
  33. %%%   abstract  = "This is part of the AMS-\LaTeX{} distribution. It
  34. %%%                provides a variety of extra mathematical features,
  35. %%%                largely derived from AMS-\TeX{}.",
  36. %%%   docstring = "The checksum field above contains a CRC-16 checksum
  37. %%%                as the first value, followed by the equivalent of
  38. %%%                the standard UNIX wc (word count) utility output of
  39. %%%                lines, words, and characters.  This is produced by
  40. %%%                Robert Solovay's checksum utility.",
  41. %%% }
  42. %%% ====================================================================
  43. \NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX)
  44. [1994/12/01]% LaTeX date must December 1994 or later
  45. \ProvidesPackage{amsmath}[1997/03/20 v1.2d AMS math features]
  46. \DeclareOption{intlimits}{\let\ilimits@\displaylimits}
  47. \DeclareOption{nointlimits}{\let\ilimits@\nolimits}
  48. \DeclareOption{sumlimits}{\let\slimits@\displaylimits}
  49. \DeclareOption{nosumlimits}{\let\slimits@\nolimits}
  50. \DeclareOption{namelimits}{\PassOptionsToPackage{namelimits}{amsopn}}
  51. \DeclareOption{nonamelimits}{%
  52.   \PassOptionsToPackage{nonamelimits}{amsopn}}
  53. \newif\ifctagsplit@
  54. \newif\iftagsleft@
  55. \DeclareOption{leqno}{\tagsleft@true}
  56. \DeclareOption{reqno}{\tagsleft@false}
  57. \DeclareOption{centertags}{\ctagsplit@true}
  58. \DeclareOption{tbtags}{\ctagsplit@false}
  59. \DeclareOption{cmex10}{%
  60.   \ifnum\cmex@opt=\@ne \def\cmex@opt{0}%
  61.   \else \def\cmex@opt{10}\fi
  62. \@ifundefined{cmex@opt}{\def\cmex@opt{7}}{}
  63. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  64. \newif\if@fleqn
  65. \newskip\@mathmargin
  66. \@mathmargin\@centering
  67. \DeclareOption{fleqn}{%
  68.     \@fleqntrue
  69.     \@mathmargin = -1sp
  70.     \AtBeginDocument{%
  71.         \ifdim\@mathmargin= -1sp
  72.             \@mathmargin\leftmargini
  73.         \fi
  74.     }%
  75. \ExecuteOptions{nointlimits,sumlimits,namelimits,centertags}
  76. \ProcessOptions\relax
  77. \ifnum\cmex@opt=7 \relax
  78.   \DeclareFontShape{OMX}{cmex}{m}{n}{%
  79.     <-8>cmex7<8>cmex8<9>cmex9%
  80.     <10><10.95><12><14.4><17.28><20.74><24.88>cmex10%
  81.   }{}%
  82.   \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
  83. \else
  84.   \ifnum\cmex@opt=\z@ % need to override cmex7 fontdef from amsfonts
  85.     \begingroup
  86.     \fontencoding{OMX}\fontfamily{cmex}%
  87.     \expandafter\let\csname OMX+cmex\endcsname\relax
  88.     \try@load@fontshape
  89.     \endgroup
  90.     \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
  91.     \def\cmex@opt{10}%
  92.   \fi
  93. \RequirePackage{amstext}[1995/01/25]
  94. \RequirePackage{amsbsy}[1995/01/20]
  95. \RequirePackage{amsopn}[1995/01/20]
  96. \def\@amsmath@err{\PackageError{amsmath}}
  97. \def\AmS{{\protect\AmSfont
  98.   A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}}
  99. \def\AmSfont{%
  100.   \usefont{OMS}{cmsy}{\if\@xp\@car\f@series\@nil bb\else m\fi}{n}}
  101. \def\pr@m@s{%
  102.   \ifx\@let@token'\DN@##1{\prim@s}\else\let\next@\egroup\fi\next@}
  103. \def\prim@s{\prime\futurelet\@let@token\pr@m@s}
  104. \let\@prime=\prime
  105. \renewcommand{\prime}{{\kern\z@\@prime}}
  106. \DeclareRobustCommand{\tmspace}[3]{%
  107.   \ifmmode\mskip#1#2\else\kern#1#3\fi\relax}
  108. \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
  109. \let\thinspace\,
  110. \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}}
  111. \let\negthinspace\!
  112. \renewcommand{\:}{\tmspace+\medmuskip{.2222em}}
  113. \let\medspace\:
  114. \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}}
  115. \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}}
  116. \let\thickspace\;
  117. \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}}
  118. \newcommand{\mspace}[1]{\mskip#1\relax}
  119. \begingroup\catcode`\"=12
  120. \def\@tempa#1{\expandafter\@tempb\meaning#1\relax\relax\relax\relax"0000\@nil#1}
  121. \def\@tempb#1"#2#3#4#5#6\@nil#7{%
  122.   \ifnum"#2=7 \count@"1#3#4#5\relax
  123.     \ifnum\count@<"1000 \else \global\mathchardef#7="0#3#4#5\relax \fi
  124.   \fi}
  125. \@tempa\Gamma \@tempa\Delta \@tempa\Theta \@tempa\Lambda \@tempa\Xi
  126. \@tempa\Pi \@tempa\Sigma \@tempa\Upsilon \@tempa\Phi \@tempa\Psi
  127. \@tempa\Omega
  128. \@ifundefined{varGamma}{%
  129.   \DeclareMathSymbol{\varGamma}{\mathord}{letters}{"00}
  130.   \DeclareMathSymbol{\varDelta}{\mathord}{letters}{"01}
  131.   \DeclareMathSymbol{\varTheta}{\mathord}{letters}{"02}
  132.   \DeclareMathSymbol{\varLambda}{\mathord}{letters}{"03}
  133.   \DeclareMathSymbol{\varXi}{\mathord}{letters}{"04}
  134.   \DeclareMathSymbol{\varPi}{\mathord}{letters}{"05}
  135.   \DeclareMathSymbol{\varSigma}{\mathord}{letters}{"06}
  136.   \DeclareMathSymbol{\varUpsilon}{\mathord}{letters}{"07}
  137.   \DeclareMathSymbol{\varPhi}{\mathord}{letters}{"08}
  138.   \DeclareMathSymbol{\varPsi}{\mathord}{letters}{"09}
  139.   \DeclareMathSymbol{\varOmega}{\mathord}{letters}{"0A}
  140. \endgroup
  141. \begingroup \catcode`\"=12
  142. \gdef\@@sqrt#1{\radical"270370 {#1}}
  143. \endgroup
  144. \@saveprimitive\overline\@@overline
  145. \def\overline#1{\@@overline{#1}}
  146. \def\boxed#1{\fbox{\m@th$\displaystyle#1$}}
  147. \def\implies{\DOTSB\;\Longrightarrow\;}
  148. \def\impliedby{\DOTSB\;\Longleftarrow\;}
  149. \begingroup \catcode`\"=12 % in case activated by a preceding package
  150. \gdef\And{\DOTSB\;\mathchar"3026 \;}
  151. \@tempcnta=\@xp\@gobble\vert \advance\@tempcnta "4000000
  152. \xdef\lvert{\delimiter\number\@tempcnta\space }
  153. \advance\@tempcnta "1000000
  154. \xdef\rvert{\delimiter\number\@tempcnta\space }
  155. \@tempcnta=\@xp\@gobble\Vert \advance\@tempcnta "4000000
  156. \xdef\lVert{\delimiter\number\@tempcnta\space }
  157. \advance\@tempcnta "1000000
  158. \xdef\rVert{\delimiter\number\@tempcnta\space }
  159. \endgroup % restore "
  160. \@saveprimitive\over\@@over
  161. \@saveprimitive\atop\@@atop
  162. \@saveprimitive\above\@@above
  163. \@saveprimitive\overwithdelims\@@overwithdelims
  164. \@saveprimitive\atopwithdelims\@@atopwithdelims
  165. \@saveprimitive\abovewithdelims\@@abovewithdelims
  166. \DeclareRobustCommand{\primfrac}[1]{%
  167.   \PackageWarning{amsmath}{%
  168. Foreign command \@backslashchar#1; %
  169. \protect\frac\space or \protect\genfrac\space should be used instead%
  170.   \global\@xp\let\csname#1\@xp\endcsname\csname @@#1\endcsname
  171.   \csname#1\endcsname
  172. \renewcommand{\over}{\primfrac{over}}
  173. \renewcommand{\atop}{\primfrac{atop}}
  174. \renewcommand{\above}{\primfrac{above}}
  175. \renewcommand{\overwithdelims}{\primfrac{overwithdelims}}
  176. \renewcommand{\atopwithdelims}{\primfrac{atopwithdelims}}
  177. \renewcommand{\abovewithdelims}{\primfrac{abovewithdelims}}
  178. \DeclareRobustCommand{\frac}[2]{{\begingroup#1\endgroup\@@over#2}}
  179. \newcommand{\dfrac}{\genfrac{}{}{}0}
  180. \newcommand{\tfrac}{\genfrac{}{}{}1}
  181. \DeclareRobustCommand{\binom}{\genfrac()\z@{}}
  182. \newcommand{\dbinom}{\genfrac(){0pt}0}
  183. \newcommand{\tbinom}{\genfrac(){0pt}1}
  184. \DeclareRobustCommand{\genfrac}[4]{%
  185.   \def\@tempa{#1#2}%
  186.   \edef\@tempb{\@nx\@genfrac\@mathstyle{#4}%
  187.     \csname @@\ifx @#3@over\else above\fi
  188.     \ifx\@tempa\@empty \else withdelims\fi\endcsname}
  189.   \@tempb{#1#2#3}}
  190. \def\@genfrac#1#2#3#4#5{{#1{\begingroup#4\endgroup#2#3\relax#5}}}
  191. \def\@mathstyle#1{%
  192.   \ifx\@empty#1\@empty\relax
  193.   \else\ifcase#1\displaystyle % case 0
  194.     \or\textstyle\or\scriptstyle\else\scriptscriptstyle\fi\fi}
  195. \def\colon{\nobreak\mskip2mu\mathpunct{}\nonscript
  196.   \mkern-\thinmuskip{:}\mskip6muplus1mu\relax}
  197. \begingroup \catcode`\"=12
  198. \edef\@tempa{\string\mathchar"}
  199. \def\@tempb#1"#2\@nil{#1"}
  200. \edef\@tempc{\expandafter\@tempb\meaning\coprod "\@nil}
  201. \ifx\@tempa\@tempc
  202.   \global\let\coprod@\coprod
  203.   \gdef\coprod{\DOTSB\coprod@\slimits@}
  204.   \global\let\bigvee@\bigvee
  205.   \gdef\bigvee{\DOTSB\bigvee@\slimits@}
  206.   \global\let\bigwedge@\bigwedge
  207.   \gdef\bigwedge{\DOTSB\bigwedge@\slimits@}
  208.   \global\let\biguplus@\biguplus
  209.   \gdef\biguplus{\DOTSB\biguplus@\slimits@}
  210.   \global\let\bigcap@\bigcap
  211.   \gdef\bigcap{\DOTSB\bigcap@\slimits@}
  212.   \global\let\bigcup@\bigcup
  213.   \gdef\bigcup{\DOTSB\bigcup@\slimits@}
  214.   \global\let\prod@\prod
  215.   \gdef\prod{\DOTSB\prod@\slimits@}
  216.   \global\let\sum@\sum
  217.   \gdef\sum{\DOTSB\sum@\slimits@}
  218.   \global\let\bigotimes@\bigotimes
  219.   \gdef\bigotimes{\DOTSB\bigotimes@\slimits@}
  220.   \global\let\bigoplus@\bigoplus
  221.   \gdef\bigoplus{\DOTSB\bigoplus@\slimits@}
  222.   \global\let\bigodot@\bigodot
  223.   \gdef\bigodot{\DOTSB\bigodot@\slimits@}
  224.   \global\let\bigsqcup@\bigsqcup
  225.   \gdef\bigsqcup{\DOTSB\bigsqcup@\slimits@}
  226. \endgroup
  227. \newcommand{\nobreakdash}{\leavevmode
  228.   \toks@\@emptytoks \def\@tempa##1{\toks@\@xp{\the\toks@-}\FN@\next@}%
  229.   \DN@{\ifx\@let@token-\@xp\@tempa
  230.        \else\setboxz@h{\the\toks@\nobreak}\unhbox\z@\fi}%
  231.   \FN@\next@
  232. \def\leftroot{\@amsmath@err{\Invalid@@\leftroot}\@eha}
  233. \def\uproot{\@amsmath@err{\Invalid@@\uproot}\@eha}
  234. \newcount\uproot@
  235. \newcount\leftroot@
  236. \def\root{\relaxnext@
  237.   \DN@{\ifx\@let@token\uproot\let\next@\nextii@\else
  238.    \ifx\@let@token\leftroot\let\next@\nextiii@\else
  239.    \let\next@\plainroot@\fi\fi\next@}%
  240.   \def\nextii@\uproot##1{\uproot@##1\relax\FN@\nextiv@}%
  241.   \def\nextiv@{\ifx\@let@token\@sptoken\DN@. {\FN@\nextv@}\else
  242.    \DN@.{\FN@\nextv@}\fi\next@.}%
  243.   \def\nextv@{\ifx\@let@token\leftroot\let\next@\nextvi@\else
  244.    \let\next@\plainroot@\fi\next@}%
  245.   \def\nextvi@\leftroot##1{\leftroot@##1\relax\plainroot@}%
  246.    \def\nextiii@\leftroot##1{\leftroot@##1\relax\FN@\nextvii@}%
  247.   \def\nextvii@{\ifx\@let@token\@sptoken
  248.    \DN@. {\FN@\nextviii@}\else
  249.    \DN@.{\FN@\nextviii@}\fi\next@.}%
  250.   \def\nextviii@{\ifx\@let@token\uproot\let\next@\nextix@\else
  251.    \let\next@\plainroot@\fi\next@}%
  252.   \def\nextix@\uproot##1{\uproot@##1\relax\plainroot@}%
  253.   \bgroup\uproot@\z@\leftroot@\z@\FN@\next@}
  254. \def\plainroot@#1\of#2{\setbox\rootbox\hbox{%
  255.  $\m@th\scriptscriptstyle{#1}$}%
  256.  \mathchoice{\r@@t\displaystyle{#2}}{\r@@t\textstyle{#2}}
  257.  {\r@@t\scriptstyle{#2}}{\r@@t\scriptscriptstyle{#2}}\egroup}
  258. \def\r@@t#1#2{\setboxz@h{$\m@th#1\@@sqrt{#2}$}%
  259.  \dimen@\ht\z@\advance\dimen@-\dp\z@
  260.  \setbox\@ne\hbox{$\m@th#1\mskip\uproot@ mu$}%
  261.  \advance\dimen@ by1.667\wd\@ne
  262.  \mkern-\leftroot@ mu\mkern5mu\raise.6\dimen@\copy\rootbox
  263.  \mkern-10mu\mkern\leftroot@ mu\boxz@}
  264. \let\ifgtest@\iffalse                              % initial value
  265. \def\gtest@true{\global\let\ifgtest@\iftrue}
  266. \def\gtest@false{\global\let\ifgtest@\iffalse}
  267. \let\DOTSI\relax
  268. \let\DOTSB\relax
  269. \let\DOTSX\relax
  270. {\uccode`7=`\\ \uccode`8=`m \uccode`9=`a \uccode`0=`t \uccode`!=`h
  271.  \uppercase{%
  272.   \gdef\math@#1#2#3#4#5#6\math@{\gtest@false\ifx 7#1\ifx 8#2%
  273.   \ifx 9#3\ifx 0#4\ifx !#5\xdef\meaning@{#6}\gtest@true
  274.   \fi\fi\fi\fi\fi}}}
  275. {\uccode`7=`c \uccode`8=`h \uccode`9=`\"
  276.  \uppercase{\gdef\mathch@#1#2#3#4#5#6\mathch@{\gtest@false
  277.   \ifx 7#1\ifx 8#2\ifx 9#5\gtest@true\xdef\meaning@{9#6}\fi\fi\fi}}}
  278. \newcount\classnum@
  279. \def\getmathch@#1.#2\getmathch@{\classnum@#1 \divide\classnum@4096
  280.  \ifcase\number\classnum@\or\or\gdef\thedots@{\dotsb@}\or
  281.  \gdef\thedots@{\dotsb@}\fi}
  282. {\uccode`4=`b \uccode`5=`i \uccode`6=`n
  283.  \uppercase{\gdef\mathbin@#1#2#3{\relaxnext@
  284.   \def\nextii@##1\mathbin@{\ifx\@sptoken\@let@token\gtest@true\fi}%
  285.   \gtest@false\DN@##1\mathbin@{}%
  286.  \ifx 4#1\ifx 5#2\ifx 6#3\DN@{\FN@\nextii@}\fi\fi\fi\next@}}}
  287. {\uccode`4=`r \uccode`5=`e \uccode`6=`l
  288.  \uppercase{\gdef\mathrel@#1#2#3{\relaxnext@
  289.   \def\nextii@##1\mathrel@{\ifx\@sptoken\@let@token\gtest@true\fi}%
  290.  \gtest@false\DN@##1\mathrel@{}%
  291.  \ifx 4#1\ifx 5#2\ifx 6#3\DN@{\FN@\nextii@}\fi\fi\fi\next@}}}
  292. {\uccode`5=`m \uccode`6=`a \uccode`7=`c
  293.  \uppercase{\gdef\macro@#1#2#3#4\macro@{\gtest@false
  294.   \ifx 5#1\ifx 6#2\ifx 7#3\gtest@true
  295.   \xdef\meaning@{\macro@@#4\macro@@}\fi\fi\fi}}}
  296. \def\macro@@#1->#2\macro@@{#2}
  297. \newcount\DOTSCASE@
  298. {\uccode`6=`\\ \uccode`7=`D \uccode`8=`O \uccode`9=`T \uccode`0=`S
  299.  \uppercase{\gdef\DOTS@#1#2#3#4#5{\gtest@false\DN@##1\DOTS@{}%
  300.   \ifx 6#1\ifx 7#2\ifx 8#3\ifx 9#4\ifx 0#5\let\next@\DOTS@@
  301.   \fi\fi\fi\fi\fi
  302.   \next@}}}
  303. {\uccode`3=`B \uccode`4=`I \uccode`5=`X
  304.  \uppercase{\gdef\DOTS@@#1{\relaxnext@
  305.   \def\nextii@##1\DOTS@{\ifx\@sptoken\@let@token\gtest@true\fi}%
  306.   \DN@{\FN@\nextii@}%
  307.   \ifx 3#1\global\DOTSCASE@\z@\else
  308.   \ifx 4#1\global\DOTSCASE@\@ne\else
  309.   \ifx 5#1\global\DOTSCASE@\tw@\else\DN@##1\DOTS@{}%
  310.   \fi\fi\fi\next@}}}
  311. {\uccode`5=`\\ \uccode`6=`n \uccode`7=`o \uccode`8=`t
  312.  \uppercase{\gdef\not@#1#2#3#4{\relaxnext@
  313.   \def\nextii@##1\not@{\ifx\@sptoken\@let@token\gtest@true\fi}%
  314.  \gtest@false\DN@##1\not@{}%
  315.  \ifx 5#1\ifx 6#2\ifx 7#3\ifx 8#4\DN@{\FN@\nextii@}\fi\fi\fi
  316.  \fi\next@}}}
  317. \def\keybin@{\gtest@true
  318.  \ifx\@let@token+\else\ifx\@let@token=\else
  319.  \ifx\@let@token<\else\ifx\@let@token>\else
  320.  \ifx\@let@token-\else\ifx\@let@token*\else\ifx\@let@token:\else
  321.    \gtest@false\fi\fi\fi\fi\fi\fi\fi}
  322. \@ifundefined{@ldots}{\def\@ldots{\mathellipsis}}{}
  323. \DeclareRobustCommand{\dots}{\relax
  324.   \csname\ifmmode m\else t\fi dots@\endcsname}
  325. \def\tdots@{\leavevmode\unskip\relaxnext@
  326.  \DN@{$\m@th\@ldots\,
  327.    \ifx\@let@token,\,$\else\ifx\@let@token.\,$\else
  328.    \ifx\@let@token;\,$\else\ifx\@let@token:\,$\else
  329.    \ifx\@let@token?\,$\else\ifx\@let@token!\,$\else
  330.      $ \fi\fi\fi\fi\fi\fi}%
  331.   \ \FN@\next@}
  332. \def\mdots@{\FN@\mdots@@}
  333. \def\mdots@@{\gdef\thedots@{\dotso@}%
  334.  \ifx\@let@token\boldsymbol \gdef\thedots@\boldsymbol{\boldsymboldots@}%
  335.  \else\ifx,\@let@token \gdef\thedots@{\dotsc}%
  336.  \else\ifx\not\@let@token \gdef\thedots@{\dotsb@}%
  337.  \else\keybin@
  338.  \ifgtest@\gdef\thedots@{\dotsb@}%
  339.  \else\xdef\meaning@{\meaning\@let@token..........}%
  340.    \xdef\meaning@@{\meaning@}%
  341.   \@xp\math@\meaning@\math@
  342.   \ifgtest@
  343.    \@xp\mathch@\meaning@\mathch@
  344.    \ifgtest@\@xp\getmathch@\meaning@\getmathch@\fi
  345.   \else\@xp\macro@\meaning@@\macro@
  346.   \ifgtest@
  347.    \@xp\not@\meaning@\not@\ifgtest@\gdef\thedots@{\dotsb@}%
  348.   \else\@xp\DOTS@\meaning@\DOTS@
  349.   \ifgtest@
  350.    \ifcase\number\DOTSCASE@\gdef\thedots@{\dotsb@}%
  351.     \or\gdef\thedots@{\dotsi}\else\fi
  352.   \else\@xp\math@\meaning@\math@
  353.   \ifgtest@\@xp\mathbin@\meaning@\mathbin@
  354.   \ifgtest@\gdef\thedots@{\dotsb@}%
  355.   \else\@xp\mathrel@\meaning@\mathrel@
  356.   \ifgtest@\gdef\thedots@{\dotsb@}%
  357.   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
  358.  \thedots@}
  359. \def\boldsymboldots@#1{\bold@true\let\@let@token=#1\let\delayed@=#1\mdots@@
  360.  \boldsymbol#1\bold@false}
  361. \def\@cdots{\mathinner{\cdotp\cdotp\cdotp}}
  362. \def\dotsi{\!\@cdots}
  363. \let\dotsb@\@cdots
  364. \def\rightdelim@{\gtest@true
  365.  \ifx\@let@token)\else
  366.  \ifx\@let@token]\else
  367.  \ifx\@let@token\rbrack\else
  368.  \ifx\@let@token\}\else
  369.  \ifx\@let@token\rbrace\else
  370.  \ifx\@let@token\rangle\else
  371.  \ifx\@let@token\rceil\else
  372.  \ifx\@let@token\rfloor\else
  373.  \ifx\@let@token\rgroup\else
  374.  \ifx\@let@token\rmoustache\else
  375.  \ifx\@let@token\right\else
  376.  \ifx\@let@token\bigr\else
  377.  \ifx\@let@token\biggr\else
  378.  \ifx\@let@token\Bigr\else
  379.  \ifx\@let@token\Biggr\else\gtest@false
  380.  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
  381. \def\extra@{%
  382.  \rightdelim@\ifgtest@
  383.  \else\ifx\@let@token$\gtest@true
  384.  \else\xdef\meaning@{\meaning\@let@token..........}%
  385.  \@xp\macro@\meaning@\macro@\ifgtest@
  386.  \@xp\DOTS@\meaning@\DOTS@
  387.  \ifgtest@
  388.  \ifnum\DOTSCASE@=\tw@\gtest@true\else\gtest@false
  389.  \fi\fi\fi\fi\fi}
  390. \newif\ifbold@
  391. \def\dotso@{\relaxnext@
  392.  \ifbold@
  393.   \let\@let@token\delayed@
  394.   \def\nextii@{\extra@\@ldots\ifgtest@\,\fi}%
  395.  \else
  396.   \def\nextii@{\DN@{\extra@\@ldots\ifgtest@\,\fi}\FN@\next@}%
  397.  \nextii@}
  398. \def\extrap@#1{%
  399.  \DN@{#1\,}%
  400.  \ifx\@let@token,\else
  401.  \ifx\@let@token;\else
  402.  \ifx\@let@token.\else\extra@
  403.  \ifgtest@\else
  404.  \let\next@#1\fi\fi\fi\fi\next@}
  405. \DeclareRobustCommand{\ldots}{\relax
  406.   \ifmmode \DN@{\extrap@\@ldots}%
  407.   \else \let\next@\tdots@\fi
  408.   \FN@\next@}
  409. \DeclareRobustCommand{\cdots}{\DN@{\extrap@\@cdots}\FN@\next@}
  410. \let\dotso\ldots
  411. \let\dotsb\cdots
  412. \let\dotsm\dotsb
  413. \DeclareRobustCommand{\dotsc}{%
  414.   \DN@{\ifx\@let@token;\@ldots\,%
  415.        \else \ifx\@let@token.\@ldots\,%
  416.        \else \extra@\@ldots \ifgtest@\,\fi
  417.        \fi\fi}%
  418.   \FN@\next@}
  419. \def\longrightarrow{\DOTSB\relbar\joinrel\rightarrow}
  420. \def\Longrightarrow{\DOTSB\Relbar\joinrel\Rightarrow}
  421. \def\longleftarrow{\DOTSB\leftarrow\joinrel\relbar}
  422. \def\Longleftarrow{\DOTSB\Leftarrow\joinrel\Relbar}
  423. \def\longleftrightarrow{\DOTSB\leftarrow\joinrel\rightarrow}
  424. \def\Longleftrightarrow{\DOTSB\Leftarrow\joinrel\Rightarrow}
  425. \def\mapsto{\DOTSB\mapstochar\rightarrow}
  426. \def\longmapsto{\DOTSB\mapstochar\longrightarrow}
  427. \def\hookrightarrow{\DOTSB\lhook\joinrel\rightarrow}
  428. \def\hookleftarrow{\DOTSB\leftarrow\joinrel\rhook}
  429. \def\iff{\DOTSB\;\Longleftrightarrow\;}
  430. \def\doteq{\DOTSB\mathrel{\mathop{\kern\z@ =}\limits^{\textstyle.}}}
  431. \newif\if@display
  432. \everydisplay\@xp{\the\everydisplay \@displaytrue}
  433. \def\int{\DOTSI\intop\ilimits@}
  434. \def\oint{\DOTSI\ointop\ilimits@}
  435. \def\intkern@{\mkern-6mu\mathchoice{\mkern-3mu}{}{}{}}
  436. \def\intdots@{\mathchoice{\@cdots}%
  437.  {{\cdotp}\mkern1.5mu{\cdotp}\mkern1.5mu{\cdotp}}%
  438.  {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}%
  439.  {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}}
  440. \def\iint{\DOTSI\protect\ints@\tw@}
  441. \def\iiint{\DOTSI\protect\ints@\thr@@}
  442. \def\iiiint{\DOTSI\protect\ints@{4}}
  443. \def\idotsint{\DOTSI\protect\ints@\z@}
  444. \def\ints@#1{%
  445.   \mkern-7mu\mathchoice{\mkern-2mu}{}{}{}%
  446.   \mathop{\mkern7mu\mathchoice{\mkern2mu}{}{}{}%
  447.     \intop\ifnum#1=\z@\intdots@
  448.     \else\intkern@\fi
  449.     \ifnum#1>\tw@\intop\intkern@\fi
  450.     \ifnum#1>\thr@@\intop\intkern@\fi
  451.     \intop
  452.   }\ilimits@
  453. \newbox\Mathstrutbox@
  454. \setbox\Mathstrutbox@=\hbox{}
  455. \def\Mathstrut@{\copy\Mathstrutbox@}
  456. \begingroup \catcode`\"=12
  457. \gdef\resetMathstrut@{%
  458.   \setbox\z@\hbox{%
  459.     \mathchardef\@tempa\mathcode`\(\relax
  460.     \def\@tempb##1"##2##3{\the\textfont"##3\char"}%
  461.     \expandafter\@tempb\meaning\@tempa \relax
  462.   \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@
  463. \endgroup
  464. \addto@hook\every@math@size{\resetMathstrut@}
  465. \newbox\strutbox@
  466. \def\strut@{\copy\strutbox@}
  467. \addto@hook\every@math@size{%
  468.   \global\setbox\strutbox@\hbox{\lower.5\normallineskiplimit
  469.          \vbox{\kern-\normallineskiplimit\copy\strutbox}}}
  470. \def\big{\bBigg@\@ne}
  471. \def\Big{\bBigg@{1.5}}
  472. \def\bigg{\bBigg@\tw@}
  473. \def\Bigg{\bBigg@{2.5}}
  474. \def\bBigg@#1#2{%
  475.   {\@mathmeasure\z@{\nulldelimiterspace\z@}%
  476.      {\left#2\vcenter to#1\big@size{}\right.}%
  477.    \box\z@}}
  478. \addto@hook\every@math@size{%
  479.   \global\big@size 1.2\ht\Mathstrutbox@
  480.   \global\advance\big@size 1.2\dp\Mathstrutbox@ }
  481. \newdimen\big@size
  482. \def\accentclass@{7}
  483. \def\noaccents@{\def\accentclass@{0}}
  484. \DeclareFontEncoding{OML}{}{\noaccents@}
  485. \DeclareFontEncoding{OMS}{}{\noaccents@}
  486. \begingroup \catcode`\"=12
  487. \def\@tempa#1#2\@nil{\def\@tempc{#1}}\def\@tempb{\mathaccent}
  488. \expandafter\@tempa\hat \relax\relax\@nil
  489. \ifx\@tempb\@tempc
  490.   \def\@tempa#1\@nil{#1}%
  491.   \def\@tempb#1{\afterassignment\@tempa\mathchardef\@tempc=}%
  492.   \def\@tempe#1"{}
  493.   \def\do#1"#2{}
  494.   \def\@tempd#1#2{\expandafter\@tempb#1\@nil
  495.     \ifnum\@tempc<"1000
  496.       \edef\@tempc{"\@nx\accentclass@
  497.         \ifnum\@tempc<"100 0\fi
  498.         \@xp\@tempe\meaning\@tempc\space}%
  499.     \else
  500.       \edef\@tempc{"\@nx\@nx\@nx\accentclass@
  501.         \@xp\do\meaning\@tempc\space}%
  502.     \fi
  503.     \xdef#1{\mathaccent\@tempc}%
  504.     \toks@{%
  505.       \relax\ifmmode \else\DN@##1##2{\nonmatherr@{#2}}\@xp\next@\fi
  506.       \mathaccent@}%
  507.     \xdef#2{\the\toks@{\@tempc}}%
  508.   \@tempd\hat\Hat \@tempd\check\Check \@tempd\tilde\Tilde
  509.   \@tempd\acute\Acute \@tempd\grave\Grave \@tempd\dot\Dot
  510.   \@tempd\ddot\Ddot \@tempd\breve\Breve \@tempd\bar\Bar
  511. \endgroup
  512. \newcount\skewcharcount@
  513. \newcount\familycount@
  514. \def\theskewchar@{\familycount@\@ne
  515.  \global\skewcharcount@\the\skewchar\textfont\@ne
  516.  \ifnum\mathgroup>\m@ne\ifnum\mathgroup<16
  517.   \global\familycount@\the\mathgroup\relax
  518.   \global\skewcharcount@\the\skewchar\textfont\the\mathgroup\relax\fi\fi
  519.  \ifnum\skewcharcount@>\m@ne
  520.   \ifnum\skewcharcount@<128
  521.   \multiply\familycount@256
  522.   \global\advance\skewcharcount@\familycount@
  523.   \global\advance\skewcharcount@28672
  524.   \mathchar\skewcharcount@\else
  525.   \global\skewcharcount@\m@ne\fi\else
  526.  \global\skewcharcount@\m@ne\fi}
  527. \newcount\pointcount@
  528. \def\getpoints@#1.#2\getpoints@{\pointcount@#1 }
  529. \newdimen\accentdimen@
  530. \newcount\accentmu@
  531. \def\dimentomu@{\multiply\accentdimen@ 100
  532.  \@xp\getpoints@\the\accentdimen@\getpoints@
  533.  \multiply\pointcount@18
  534.  \divide\pointcount@\@m
  535.  \global\accentmu@\pointcount@}
  536. \def\mathaccent@#1#2{\ifnum\mathgroup=\m@ne\xdef\thefam@{1}\else
  537.  \xdef\thefam@{\the\mathgroup}\fi
  538.  \accentdimen@\z@
  539.  \setboxz@h{\unbracefonts@$\m@th\mathgroup\thefam@\relax#2$}%
  540.  \ifdim\accentdimen@=\z@\DN@{\mathaccent#1{#2}}%
  541.   \setbox\@ne\hbox{\unbracefonts@
  542.     $\m@th\mathgroup\thefam@\relax#2\theskewchar@$}
  543.   \setbox\tw@\hbox{$\m@th\ifnum\skewcharcount@=\m@ne\else
  544.    \mathchar\skewcharcount@\fi$}%
  545.   \global\accentdimen@\wd\@ne\global\advance\accentdimen@-\wdz@
  546.   \global\advance\accentdimen@-\wd\tw@
  547.   \global\multiply\accentdimen@\tw@
  548.   \dimentomu@\global\advance\accentmu@\@ne
  549.  \else\DN@{{\mathaccent#1{#2\mkern\accentmu@ mu}%
  550.     \mkern-\accentmu@ mu}{}}\fi
  551.  \next@}
  552. \def\unbracefonts@{\let\math@bgroup\@empty\let\math@egroup\@empty}
  553. \def\nonmatherr@#1{\@amsmath@err{\protect
  554.   #1 allowed only in math mode}\@ehd}
  555. \begingroup \catcode`\"=12
  556. \def\@tempa#1#2{\gdef#1{\RIfM@\DN@{\mathaccent@{"\accentclass@#2 }}%
  557.   \else\DN@{\nonmatherr@{#1}}\fi\next@}}
  558. \@tempa\Hat{05E}\@tempa\Check{014}\@tempa\Tilde{07E}\@tempa\Acute{013}
  559. \@tempa\Grave{012}\@tempa\Dot{05F}\@tempa\Ddot{07F}\@tempa\Breve{015}
  560. \@tempa\Bar{016}
  561. \gdef\Vec{\RIfM@\DN@{\mathaccent@{"017E }}\else
  562.  \DN@{\nonmatherr@\Vec}\fi\next@}
  563. \endgroup
  564. \def\dddot#1{{\mathop{#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@
  565.  \hbox{\normalfont ...}\vss}}}}
  566. \def\ddddot#1{{\mathop{#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@
  567.  \hbox{\normalfont....}\vss}}}}
  568. \def\bmod{\mskip-\medmuskip\mkern5mu\mathbin
  569.   {\operator@font mod}\penalty900
  570.   \mkern5mu\mskip-\medmuskip}
  571. \def\pod#1{\allowbreak\if@display\mkern18mu\else\mkern8mu\fi(#1)}
  572. \def\pmod#1{\pod{{\operator@font mod}\mkern6mu#1}}
  573. \def\mod#1{\allowbreak\if@display\mkern18mu
  574.   \else\mkern12mu\fi{\operator@font mod}\,\,#1}
  575. \newcommand{\cfrac}[3][c]{{\displaystyle\frac{%
  576.   \strut\ifx r#1\hfill\fi#2\ifx l#1\hfill\fi}{#3}}%
  577.   \kern-\nulldelimiterspace}
  578. \def\overset#1#2{\binrel@{#2}%
  579.   \binrel@@{\mathop{\kern\z@#2}\limits^{#1}}}
  580. \def\underset#1#2{\binrel@{#2}%
  581.   \binrel@@{\mathop{\kern\z@#2}\limits_{#1}}}
  582. \def\sideset#1#2#3{%
  583.   \@mathmeasure\z@\displaystyle{#3}%
  584.   \global\setbox\@ne\vbox to\ht\z@{}\dp\@ne\dp\z@
  585.   \setbox\tw@\box\@ne
  586.   \@mathmeasure4\displaystyle{\copy\tw@#1}%
  587.   \@mathmeasure6\displaystyle{#3\nolimits#2}%
  588.   \dimen@-\wd6 \advance\dimen@\wd4 \advance\dimen@\wd\z@
  589.   \hbox to\dimen@{}\mathop{\kern-\dimen@\box4\box6}%
  590. \renewcommand{\smash}[2][tb]{%
  591.   \def\smash@{#1}%
  592.   \ifmmode\@xp\mathpalette\@xp\mathsm@sh\else
  593.         \@xp\makesm@sh\fi{#2}}
  594. \def\finsm@sh{\def\mb@t{\ht\z@\z@}\def\mb@b{\dp\z@\z@}%
  595.   \def\mb@tb{\mb@t\mb@b}%
  596.   {\csname mb@\smash@\endcsname}%
  597.   \leavevmode\boxz@}
  598. \def\rightarrowfill@#1{\m@th\setboxz@h{$#1\relbar$}\ht\z@\z@
  599.   $#1\copy\z@\mkern-6mu\cleaders
  600.   \hbox{$#1\mkern-2mu\box\z@\mkern-2mu$}\hfill
  601.   \mkern-6mu\mathord\rightarrow$}
  602. \def\leftarrowfill@#1{\m@th\setboxz@h{$#1\relbar$}\ht\z@\z@
  603.   $#1\mathord\leftarrow\mkern-6mu\cleaders
  604.   \hbox{$#1\mkern-2mu\copy\z@\mkern-2mu$}\hfill
  605.   \mkern-6mu\box\z@$}
  606. \def\leftrightarrowfill@#1{\m@th\setboxz@h{$#1\relbar$}\ht\z@\z@
  607.   $#1\mathord\leftarrow\mkern-6mu\cleaders
  608.   \hbox{$#1\mkern-2mu\box\z@\mkern-2mu$}\hfill
  609.   \mkern-6mu\mathord\rightarrow$}
  610. \def\overarrow@#1#2#3{\vbox{\ialign{##\crcr#1#2\crcr
  611.  \noalign{\kern-\ex@\nointerlineskip}$\m@th\hfil#2#3\hfil$\crcr}}}
  612. \def\overrightarrow{\mathpalette{\overarrow@\rightarrowfill@}}
  613. \def\overleftarrow{\mathpalette{\overarrow@\leftarrowfill@}}
  614. \def\overleftrightarrow{\mathpalette{\overarrow@\leftrightarrowfill@}}
  615. \def\underarrow@#1#2#3{%
  616.  \vtop{\ialign{##\crcr$\m@th\hfil#2#3\hfil$\crcr
  617.  \noalign{\nointerlineskip\kern-.5\ex@}#1#2\crcr}}}
  618. \def\underrightarrow{\mathpalette{\underarrow@\rightarrowfill@}}
  619. \def\underleftarrow{\mathpalette{\underarrow@\leftarrowfill@}}
  620. \def\underleftrightarrow{\mathpalette{\underarrow@\leftrightarrowfill@}}
  621. \newcommand{\xrightarrow}[2][]{%
  622.   \mathrel{\mathop{%
  623.     \setbox\z@\vbox{\m@th
  624.       \hbox{$\scriptstyle\;{#1}\;\;$}%
  625.       \hbox{$\m@th\scriptstyle\;{#2}\;\;$}%
  626.     }%
  627.     \hbox to\ifdim\wd\z@>\minaw@\wd\z@\else\minaw@\fi{%
  628.       \rightarrowfill@\displaystyle}}%
  629.   \limits^{#2}\@ifnotempty{#1}{_{#1}}}%
  630. \newcommand{\xleftarrow}[2][]{%
  631.   \mathrel{\mathop{%
  632.     \setbox\z@\vbox{\m@th
  633.       \hbox{$\scriptstyle\;\;{#1}\;$}%
  634.       \hbox{$\m@th\scriptstyle\;\;{#2}\;\;$}%
  635.     }%
  636.     \hbox to\ifdim\wd\z@>\minaw@\wd\z@\else\minaw@\fi{%
  637.       \leftarrowfill@\displaystyle}}%
  638.   \limits^{#2}\@ifnotempty{#1}{_{#1}}}%
  639. \@ifundefined{minaw@}{\newdimen\minaw@\minaw@11pt}{}
  640. \newcommand{\Sb}{\PackageError{amsmath}%
  641.   {Environment `Sb' is obsolete; use `substack' instead}%
  642.   {The \protect\\protect\ used to separate lines in a `Sb' environment can
  643.    cause problems if `Sb' is embedded in some aligning environments.}}
  644. \newcommand{\Sp}{\PackageError{amsmath}%
  645.   {Environment `Sp' is obsolete; use `substack' instead}%
  646.   {The \protect\\protect\ used to separate lines in a `Sp' environment can
  647.    cause problems if `Sp' is embedded in some aligning environments.}}
  648. \newenvironment{subarray}[1]{%
  649.   \vcenter\bgroup
  650.   \Let@ \restore@math@cr \default@tag
  651.   \baselineskip\fontdimen10 \scriptfont\tw@
  652.   \advance\baselineskip\fontdimen12 \scriptfont\tw@
  653.   \lineskip\thr@@\fontdimen8 \scriptfont\thr@@
  654.   \lineskiplimit\lineskip
  655.   \ialign\bgroup\ifx c#1\hfil\fi
  656.     $\m@th\scriptstyle##$\hfil\crcr
  657.   \crcr\egroup\egroup
  658. \newcommand{\substack}[1]{\subarray{c}#1\endsubarray}
  659. \newenvironment{smallmatrix}{\null\,\vcenter\bgroup
  660.   \Let@\restore@math@cr\default@tag
  661.   \baselineskip6\ex@ \lineskip1.5\ex@ \lineskiplimit\lineskip
  662.   \ialign\bgroup\hfil$\m@th\scriptstyle##$\hfil&&\thickspace\hfil
  663.   $\m@th\scriptstyle##$\hfil\crcr
  664.   \crcr\egroup\egroup\,%
  665. \newcount\c@MaxMatrixCols \c@MaxMatrixCols=10
  666. \renewenvironment{matrix}{%
  667.   \hskip -\arraycolsep\array{*\c@MaxMatrixCols c}%
  668.   \endarray \hskip -\arraycolsep
  669. \renewenvironment{pmatrix}{\left(\matrix}{\endmatrix\right)}
  670. \newenvironment{bmatrix}{\left[\matrix}{\endmatrix\right]}
  671. \newenvironment{Bmatrix}{\left\lbrace\matrix}{\endmatrix\right\rbrace}
  672. \newenvironment{vmatrix}{\left\lvert\matrix}{\endmatrix\right\rvert}
  673. \newenvironment{Vmatrix}{\left\lVert\matrix}{\endmatrix\right\rVert}
  674. \let\hdots\@ldots
  675. \newcommand{\hdotsfor}[1]{%
  676.   \ifx[#1\@xp\shdots@for\else\hdots@for\@ne{#1}\fi}
  677. \newmuskip\dotsspace@
  678. \def\shdots@for#1]{\hdots@for{#1}}
  679. \def\hdots@for#1#2{\multicolumn{#2}c%
  680.   {\m@th\dotsspace@1.5mu\mkern-#1\dotsspace@
  681.    \xleaders\hbox{$\m@th\mkern#1\dotsspace@.\mkern#1\dotsspace@$}%
  682.            \hfill
  683.    \mkern-#1\dotsspace@}%
  684. \renewenvironment{cases}{%
  685.   \left\{\def\arraystretch{1.2}%
  686.   \array{@{}l@{\quad}l@{}}%
  687.   \endarray\right.%
  688. \newcounter{parentequation}% Counter for ``parent equation''.
  689. \newenvironment{subequations}{%
  690.   \refstepcounter{equation}%
  691.   \begingroup % conservative approach
  692.   \let\protect\@nx
  693.   \edef\@tempa{\def\@nx\theparentequation{\theequation}}%
  694.   \@xp\endgroup\@tempa
  695.   \setcounter{parentequation}{\value{equation}}%
  696.   \setcounter{equation}{0}%
  697.   \def\theequation{\theparentequation\alph{equation}}%
  698.   \ignorespaces
  699.   \setcounter{equation}{\value{parentequation}}%
  700.   \global\@ignoretrue
  701. \def\numberwithin#1#2{\@ifundefined{c@#1}{\@nocounterr{#1}}{%
  702.   \@ifundefined{c@#2}{\@nocnterr{#2}}{%
  703.   \@addtoreset{#1}{#2}%
  704.   \toks@\@xp\@xp\@xp{\csname the#1\endcsname}%
  705.   \@xp\xdef\csname the#1\endcsname
  706.     {\@xp\@nx\csname the#2\endcsname
  707.      .\the\toks@}}}}
  708. \def\eqref#1{\textup{\tagform@{\ref{#1}}}}
  709. \newcount\dspbrk@lvl
  710. \dspbrk@lvl=-1
  711. \interdisplaylinepenalty\@M
  712. \def\allowdisplaybreaks{%
  713.   \new@ifnextchar[\allowdspbrks@{\allowdspbrks@[4]}}
  714. \def\allowdspbrks@[#1]{%
  715.   \interdisplaylinepenalty\getdsp@pen{#1}}
  716. \def\getdsp@pen#1{%
  717.   \ifcase #1\relax \@M
  718.     \or 9999
  719.     \or 6999
  720.     \or 2999
  721.     \or \z@\fi}
  722. \def\displaybreak{\@amsmath@err{\Invalid@@\displaybreak}\@eha}
  723. \def\displaybreak@{%
  724.   \def\displaybreak{\new@ifnextchar[\dspbrk@{\dspbrk@[4]}}}
  725. \def\dspbrk@[#1]{\global\dspbrk@lvl #1\relax}
  726. \def\math@cr{{\ifnum0=`}\fi
  727.   \@ifstar{\global\@eqpen\@M\math@cr@}%
  728.           {\global\@eqpen
  729.              \ifnum\dspbrk@lvl <\z@ \interdisplaylinepenalty
  730.               \else -\@getpen\dspbrk@lvl \fi
  731.            \math@cr@}}
  732. \def\math@cr@{\new@ifnextchar[\math@cr@@{\math@cr@@[\z@]}}
  733. \def\math@cr@@[#1]{\ifnum0=`{\fi}\math@cr@@@
  734.   \noalign{\vskip#1\relax}}
  735. \def\Let@{\let\\\math@cr}
  736. \def\restore@math@cr{\def\math@cr@@@{\cr}}
  737. \restore@math@cr
  738. \def\intertext{\@amsmath@err{\Invalid@@\intertext}\@eha}
  739. \def\intertext@{%
  740.   \def\intertext##1{%
  741.     \ifvmode\else\\\@empty\fi
  742.     \noalign{%
  743.       \penalty\postdisplaypenalty\vskip\belowdisplayskip
  744.       \vbox{\normalbaselines
  745.         \ifdim\linewidth=\columnwidth
  746.         \else \parshape\@ne \@totalleftmargin \linewidth
  747.         \fi
  748.         \noindent##1\par}%
  749.       \penalty\predisplaypenalty\vskip\abovedisplayskip%
  750.     }%
  751. \newhelp\tag@help
  752.   {tag cannot be used at this point.\space
  753.    If you don't understand why^^Jyou should consult
  754.    the documentation.^^JBut don't worry: just continue, and I'll
  755.    forget what happened.}
  756. \def\gobble@tag{\@ifstar\@gobble\@gobble}
  757. \def\invalid@tag#1{\@amsmath@err{#1}{\the\tag@help}\gobble@tag}
  758. \def\dft@tag{\invalid@tag{\string\tag\space not allowed here}}
  759. \def\default@tag{\let\tag\dft@tag}
  760. \default@tag
  761. \def\maketag@@{\@ifstar\maketag@@@\tagform@}
  762. \def\maketag@@@#1{\hbox{\m@th\normalfont#1}}
  763. \def\tagform@#1{\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr)}}
  764. \iftagsleft@
  765.   \def\@eqnnum{\hbox to1sp{}\rlap{\normalfont\normalcolor
  766.     \hskip -\displaywidth\tagform@\theequation}}
  767. \else
  768.   \def\@eqnnum{{\normalfont\normalcolor \tagform@\theequation}}
  769. \def\thetag{\leavevmode\tagform@}
  770. \def\make@df@tag{\@ifstar\make@df@tag@@\make@df@tag@@@}
  771. \def\make@df@tag@@#1{%
  772.   \gdef\df@tag{\maketag@@@{#1}\def\@currentlabel{#1}}}
  773. \def\make@df@tag@@@#1{\gdef\df@tag{\tagform@{#1}%
  774.   \toks@\@xp{\p@equation{#1}}\edef\@currentlabel{\the\toks@}}}
  775. \let\ltx@label\label
  776. \def\label@in@display{%
  777.     \ifx\df@label\@empty\else
  778.         \@amsmath@err{Multiple \string\label's:
  779.             label '\df@label' will be lost}\@eha
  780.     \fi
  781.     \gdef\df@label
  782. \let\df@label\@empty
  783. \def\make@display@tag{%
  784.     \if@eqnsw
  785.         \refstepcounter{equation}%
  786.         \tagform@\theequation
  787.     \else
  788.         \iftag@
  789.             \df@tag
  790.             \global\let\df@tag\@empty
  791.         \fi
  792.     \fi
  793.     \ifx\df@label\@empty\else
  794.         \ltx@label{\df@label}%
  795.         \global\let\df@label\@empty
  796.     \fi
  797. \def\tag@in@align{%
  798.     \relax
  799.     \iftag@
  800.         \DN@{\invalid@tag{Multiple \string\tag}}%
  801.     \else
  802.     \global\tag@true
  803.     \nonumber
  804.         \let\next@\make@df@tag
  805.     \fi
  806.     \next@
  807. \def\raisetag#1{\skip@#1\relax
  808.   \xdef\raise@tag{\vskip\iftagsleft@\else-\fi\the\skip@\relax}%
  809. \let\raise@tag\@empty
  810. \def\notag{\nonumber}
  811. \newif\ifinany@
  812. \newif\ifinalign@
  813. \newif\ifingather@
  814. \newif\iftag@
  815. \newif\ifst@rred
  816. \newif\ifmeasuring@
  817. \newif\ifshifttag@
  818. \newcount\row@
  819. \newcount\column@
  820. \def\column@plus{%
  821.     \global\advance\column@\@ne
  822. \newcount\maxfields@
  823. \def\add@amps#1{%
  824.     \begingroup
  825.         \count@#1
  826.         \DN@{}%
  827.         \loop
  828.             \ifnum\count@>\column@
  829.                 \edef\next@{&\next@}%
  830.                 \advance\count@\m@ne
  831.         \repeat
  832.     \@xp\endgroup
  833.     \next@
  834. \newhelp\andhelp@
  835. {An extra & here is so disastrous that you should probably exit^^J
  836. and fix things up.}
  837. \newdimen\eqnshift@
  838. \newdimen\alignsep@
  839. \newdimen\tagshift@
  840. \def\mintagsep{.5\fontdimen6\textfont2}
  841. \def\minalignsep{10pt}
  842. \newdimen\tagwidth@
  843. \newdimen\totwidth@
  844. \newdimen\lineht@
  845. \def\tag@width#1{%
  846.     \ifcase\@xp#1\tag@lengths\fi
  847. \def\savetaglength@{%
  848.     \begingroup
  849.         \let\or\relax
  850.         \xdef\tag@lengths{\tag@lengths\or \the\wdz@}%
  851.     \endgroup
  852. \def\shift@tag#1{%
  853.     \ifcase\@xp#1\tag@shifts\fi\relax
  854. \let\tag@shifts\@empty
  855. \def\saveshift@#1{%
  856.     \begingroup
  857.         \let\or\relax
  858.         \xdef\tag@shifts{\or#1\tag@shifts}%
  859.     \endgroup
  860. \def\displ@y{\@display@init{}}
  861. \def\@display@init#1{%
  862.     \global\dt@ptrue
  863.     \openup\jot\m@th
  864.     \everycr{%
  865.         \noalign{%
  866.             #1%
  867.             \ifdt@p
  868.                 \global\dt@pfalse
  869.                 \vskip-\lineskiplimit
  870.                 \vskip\normallineskiplimit
  871.             \else
  872.                 \penalty\@eqpen
  873.             \fi
  874.         }%
  875.     }%
  876. \def\displ@y@{\@display@init{%
  877.   \global\column@\z@ \global\dspbrk@lvl\m@ne
  878.   \global\tag@false \global\let\raise@tag\@empty
  879. \def\black@#1{%
  880.     \noalign{%
  881.         \ifdim#1>\displaywidth
  882.             \dimen@\prevdepth
  883.             \nointerlineskip
  884.             \vskip-\ht\strutbox@
  885.             \vskip-\dp\strutbox@
  886.             \vbox{\noindent\hbox to#1{\strut@\hfill}}%
  887.             \prevdepth\dimen@
  888.         \fi
  889.     }%
  890. \def\savecounters@{%
  891.     \begingroup
  892.         \def\@elt##1{%
  893.           \global\csname c@##1\endcsname\the\csname c@##1\endcsname}%
  894.         \xdef\@tempa{%
  895.             \cl@@ckpt
  896.             \let\@nx\restorecounters@\@nx\@empty
  897.         }%
  898.     \endgroup
  899.     \let\restorecounters@\@tempa
  900. \let\restorecounters@\@empty
  901. \def\savealignstate@{%
  902.     \begingroup
  903.         \let\or\relax
  904.         \xdef\@tempa{%
  905.             \global\totwidth@\the\totwidth@
  906.             \global\row@\the\row@
  907.             \gdef\@nx\tag@lengths{\tag@lengths}%
  908.             \let\@nx\restorealignstate@\@nx\@empty
  909.         }%
  910.     \endgroup
  911.     \let\restorealignstate@\@tempa
  912. \let\restorealignstate@\@empty
  913. \newtoks\@envbody
  914. \def\addto@envbody#1{\@envbody\@xp{\the\@envbody#1}}
  915. \def\collect@body#1{%
  916.     \@envbody{}%
  917.     \def\process@envbody{%
  918.         \@xp#1\@xp{\the\@envbody}%
  919.     }%
  920.     \@xp\let\csname\@currenvir\endcsname\collect@@body
  921.     \csname\@currenvir\endcsname
  922. \def\collect@@body#1\end#2{%
  923.     \def\@tempa{#2}%
  924.     \ifx\@tempa\@currenvir
  925.         \addto@envbody{#1}%
  926.         \@xp\edef\csname\@currenvir\endcsname{%
  927.             \@nx\process@envbody\@nx\end{\@tempa}%
  928.             }%
  929.     \else
  930.         \addto@envbody{#1\end{#2}}%
  931.     \fi
  932.     \csname\@currenvir\endcsname
  933. \newcommand{\start@aligned}[2]{%
  934.     \RIfM@\else
  935.         \nonmatherr@{\begin{\@currenvir}}%
  936.     \fi
  937.     \null\,%
  938.     \if #1t\vtop \else \if#1b \vbox \else \vcenter \fi \fi \bgroup
  939.         \maxfields@#2\relax
  940.         \ifnum\maxfields@>\m@ne
  941.             \multiply\maxfields@\tw@
  942.             \let\math@cr@@@\math@cr@@@alignedat
  943.         \else
  944.             \restore@math@cr
  945.         \fi
  946.         \Let@
  947.         \default@tag
  948.         \ifinany@\else\openup\jot\fi
  949.         \column@\z@
  950.         \ialign\bgroup
  951.            &\column@plus
  952.             \hfil
  953.             \strut@
  954.             $\m@th\displaystyle{##}$%
  955.            &\column@plus
  956.             $\m@th\displaystyle{{}##}$%
  957.             \hfil
  958.             \crcr
  959. \def\math@cr@@@alignedat{%
  960.     \ifnum\column@>\maxfields@
  961.         \begingroup
  962.           \measuring@false
  963.           \@amsmath@err{Extra & on this line}%
  964.             {\the\andhelp@}% "An extra & here is disastrous"
  965.         \endgroup
  966.     \fi
  967.     \column@\z@
  968.     \cr
  969. \newenvironment{aligned}[1][c]{%
  970.     \start@aligned{#1}\m@ne
  971.     \crcr\egroup\egroup
  972. \newcommand{\alignedat}[2][c]{%
  973.         \start@aligned{#1}%
  974. \let\endalignedat\endaligned
  975. \newcommand{\gathered}[1][c]{%
  976.     \RIfM@\else
  977.         \nonmatherr@{\begin{gathered}}%
  978.     \fi
  979.     \null\,%
  980.     \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi \bgroup
  981.         \Let@
  982.         \restore@math@cr
  983.         \ifinany@\else\openup\jot\fi
  984.         \ialign\bgroup
  985.             \hfil\strut@$\m@th\displaystyle##$\hfil
  986.             \crcr
  987. \let\endgathered\endaligned
  988. \def\start@gather#1{%
  989.     \RIfM@
  990.         \nomath@env
  991.         \DN@{\@namedef{end\@currenvir}{}\@gobble}%
  992.     \else
  993.         $$%
  994.         #1%
  995.         \ifst@rred\else
  996.             \global\@eqnswtrue
  997.         \fi
  998.         \let\next@\gather@
  999.     \fi
  1000.     \collect@body\next@
  1001. \def\gather{\start@gather\st@rredfalse}
  1002. \@namedef{gather*}{\start@gather\st@rredtrue}
  1003. \def\gather@#1{%
  1004.     \ingather@true
  1005.     \inany@true
  1006.     \let\tag\tag@in@align
  1007.     \let\label\label@in@display
  1008.     \displaybreak@
  1009.     \intertext@
  1010.     \displ@y@
  1011.     \Let@
  1012.     \let\math@cr@@@\math@cr@@@gather
  1013.     \gmeasure@{#1}%
  1014.     \global\shifttag@false
  1015.     \tabskip\z@skip
  1016.     \global\row@\@ne
  1017.     \halign to\displaywidth\bgroup
  1018.         \strut@
  1019.         \setboxz@h{$\m@th\displaystyle{##}$}%
  1020.         \calc@shift@gather
  1021.         \set@gather@field
  1022.         \tabskip\@centering
  1023.        &\setboxz@h{\strut@{##}}%
  1024.         \place@tag@gather
  1025.         \tabskip \iftagsleft@ \gdisplaywidth@ \else \z@skip \span\fi
  1026.         \crcr
  1027.         #1%
  1028. \def\endgather{%
  1029.         \math@cr
  1030.         \black@\totwidth@
  1031.     \egroup
  1032.     $$%
  1033.     \global\@ignoretrue
  1034. \@xp\let\csname endgather*\endcsname\endgather
  1035. \def\gmeasure@#1{%
  1036.     \begingroup
  1037.         \measuring@true
  1038.         \totwidth@\z@
  1039.         \global\let\tag@lengths\@empty
  1040.         \savecounters@
  1041.         \setbox\@ne\vbox{%
  1042.             \everycr{\noalign{\global\tag@false
  1043.               \global\let\raise@tag\@empty \global\column@\z@}}%
  1044.             \let\label\@gobble
  1045.             \halign{%
  1046.                 \setboxz@h{$\m@th\displaystyle{##}$}%
  1047.                 \ifdim\wdz@>\totwidth@
  1048.                     \global\totwidth@\wdz@
  1049.                 \fi
  1050.                &\setboxz@h{\strut@{##}}%
  1051.                 \savetaglength@
  1052.                 \crcr
  1053.                 #1%
  1054.                 \math@cr@@@
  1055.             }%
  1056.         }%
  1057.         \restorecounters@
  1058.         \if@fleqn
  1059.             \global\advance\totwidth@\@mathmargin
  1060.         \fi
  1061.         \iftagsleft@
  1062.             \ifdim\totwidth@>\displaywidth
  1063.                 \global\let\gdisplaywidth@\totwidth@
  1064.             \else
  1065.                 \global\let\gdisplaywidth@\displaywidth
  1066.             \fi
  1067.         \fi
  1068.     \endgroup
  1069. \def\math@cr@@@gather{%
  1070.     \ifst@rred\nonumber\fi
  1071.    &\relax
  1072.     \make@display@tag
  1073.     \ifst@rred\else\global\@eqnswtrue\fi
  1074.     \global\advance\row@\@ne
  1075.     \cr
  1076. \def\calc@shift@gather{%
  1077.     \dimen@\mintagsep\relax
  1078.     \tagwidth@\tag@width\row@\relax
  1079.     \if@fleqn
  1080.         \global\eqnshift@\@mathmargin
  1081.         \ifdim\tagwidth@>\z@
  1082.             \advance\dimen@\tagwidth@
  1083.             \iftagsleft@
  1084.                 \ifdim\dimen@>\@mathmargin
  1085.                     \global\shifttag@true
  1086.                 \fi
  1087.             \else
  1088.                 \advance\dimen@\@mathmargin
  1089.                 \advance\dimen@\wdz@
  1090.                 \ifdim\dimen@>\displaywidth
  1091.                    \global\shifttag@true
  1092.                 \fi
  1093.             \fi
  1094.         \fi
  1095.     \else
  1096.         \global\eqnshift@\displaywidth
  1097.         \global\advance\eqnshift@-\wdz@
  1098.         \ifdim\tagwidth@>\z@
  1099.             \multiply\dimen@\tw@
  1100.             \advance\dimen@\wdz@
  1101.             \advance\dimen@\tagwidth@
  1102.             \ifdim\dimen@>\displaywidth
  1103.                 \global\shifttag@true
  1104.             \else
  1105.                 \ifdim\eqnshift@<4\tagwidth@
  1106.                     \global\advance\eqnshift@-\tagwidth@
  1107.                 \fi
  1108.             \fi
  1109.         \fi
  1110.         \global\divide\eqnshift@\tw@
  1111.         \iftagsleft@
  1112.             \global\eqnshift@-\eqnshift@
  1113.             \global\advance\eqnshift@\displaywidth
  1114.             \global\advance\eqnshift@-\wdz@
  1115.         \fi
  1116.         \ifdim\eqnshift@<\z@
  1117.             \global\eqnshift@\z@
  1118.         \fi
  1119.     \fi
  1120. \def\place@tag@gather{%
  1121.     \iftagsleft@
  1122.         \kern-\gdisplaywidth@
  1123.         \ifshifttag@
  1124.             \rlap{\vbox{%
  1125.                 \normalbaselines
  1126.                 \boxz@
  1127.                 \vbox to\lineht@{}%
  1128.                 \raise@tag
  1129.             }}%
  1130.             \global\shifttag@false
  1131.         \else
  1132.             \rlap{\boxz@}%
  1133.         \fi
  1134.     \else
  1135.         \ifdim\totwidth@>\displaywidth
  1136.             \dimen@\totwidth@
  1137.             \advance\dimen@-\displaywidth
  1138.             \kern-\dimen@
  1139.         \fi
  1140.         \ifshifttag@
  1141.             \llap{\vtop{%
  1142.                 \raise@tag
  1143.                 \normalbaselines
  1144.                 \setbox\@ne\null
  1145.                 \dp\@ne\lineht@
  1146.                 \box\@ne
  1147.                 \boxz@
  1148.             }}%
  1149.             \global\shifttag@false
  1150.         \else
  1151.             \llap{\boxz@}%
  1152.         \fi
  1153.     \fi
  1154. \def\set@gather@field{%
  1155.     \iftagsleft@
  1156.         \global\lineht@\ht\z@
  1157.     \else
  1158.         \global\lineht@\dp\z@
  1159.     \fi
  1160.     \kern\eqnshift@
  1161.     \boxz@
  1162.     \hfil
  1163. \newif\ifxxat@
  1164. \newif\ifcheckat@
  1165. \let\xatlevel@\@empty
  1166. \def\start@align#1#2#3{%
  1167.     \let\xatlevel@#1% always \z@, \@ne, or \tw@
  1168.     \maxfields@#3\relax
  1169.     \ifnum\maxfields@>\m@ne
  1170.         \checkat@true
  1171.         \ifnum\xatlevel@=\tw@
  1172.             \xxat@true
  1173.         \fi
  1174.         \multiply\maxfields@\tw@
  1175.     \else
  1176.         \checkat@false
  1177.     \fi
  1178.     \ifingather@
  1179.         {\ifnum0=`}\fi
  1180.         \DN@{\vcenter\bgroup\savealignstate@\align@#2}%
  1181.     \else
  1182.         \ifmmode
  1183.             \nomath@env
  1184.             \DN@{\@namedef{end\@currenvir}{}\@gobble}%
  1185.         \else
  1186.             $$%
  1187.             \DN@{\align@#2}%
  1188.         \fi
  1189.     \fi
  1190.     \collect@body\next@
  1191. \def\alignat{\start@align\z@\st@rredfalse}
  1192. \@namedef{alignat*}{\start@align\z@\st@rredtrue}
  1193. \def\xalignat{\start@align\@ne\st@rredfalse}
  1194. \@namedef{xalignat*}{\start@align\@ne\st@rredtrue}
  1195. \def\xxalignat{\start@align\tw@\st@rredtrue}
  1196. \def\align{\start@align\@ne\st@rredfalse\m@ne}
  1197. \@namedef{align*}{\start@align\@ne\st@rredtrue\m@ne}
  1198. \def\flalign{\start@align\tw@\st@rredfalse\m@ne}
  1199. \@namedef{flalign*}{\start@align\tw@\st@rredtrue\m@ne}
  1200. \def\align@#1#2{%
  1201.     \inany@true
  1202.     \inalign@true
  1203.     \displaybreak@
  1204.     \intertext@
  1205.     \ifingather@\else\displ@y@\fi
  1206.     \Let@
  1207.     \let\math@cr@@@\math@cr@@@align
  1208.     \ifxxat@\else
  1209.         \let\tag\tag@in@align
  1210.     \fi
  1211.     \let\label\label@in@display
  1212.     #1% set st@r
  1213.     \ifst@rred\else
  1214.         \global\@eqnswtrue
  1215.     \fi
  1216.     \measure@{#2}%
  1217.     \global\row@\z@
  1218.     \tabskip\eqnshift@
  1219.     \halign\bgroup
  1220.         \span\align@preamble\crcr
  1221.         #2%
  1222. \def\endalign{%
  1223.         \math@cr
  1224.         \black@\totwidth@
  1225.     \egroup
  1226.     \ifingather@
  1227.         \restorealignstate@
  1228.         \egroup
  1229.         \nonumber
  1230.         \ifnum0=`{\fi}%
  1231.     \else
  1232.         $$%
  1233.     \fi
  1234.     \global\@ignoretrue
  1235. \@xp\let\csname endalign*\endcsname\endalign
  1236. \let\endxalignat\endalign
  1237. \@xp\let\csname endxalignat*\endcsname\endalign
  1238. \let\endxxalignat\endalign
  1239. \let\endalignat\endalign
  1240. \@xp\let\csname endalignat*\endcsname\endalign
  1241. \let\endflalign\endalign
  1242. \@xp\let\csname endflalign*\endcsname\endalign
  1243. \def\math@cr@@@align{%
  1244.     \kern-\alignsep@
  1245.     \ifst@rred\nonumber\fi
  1246.     \if@eqnsw \global\tag@true \fi
  1247.     \global\advance\row@\@ne
  1248.     \iftag@
  1249.         \add@amps\maxfields@
  1250.         \omit
  1251.         \setboxz@h{\@lign\strut@{\make@display@tag}}%
  1252.         \place@tag
  1253.     \fi
  1254.     \ifst@rred\else\global\@eqnswtrue\fi
  1255.     \global\lineht@\z@
  1256.     \cr
  1257. \def\math@cr@@@align@measure{%
  1258.    &\omit
  1259.     \global\advance\row@\@ne
  1260.     \ifst@rred\nonumber\fi
  1261.     \if@eqnsw \global\tag@true \fi
  1262.     \ifnum\column@>\maxfields@
  1263.         \ifcheckat@
  1264.             \begingroup
  1265.               \measuring@false
  1266.               \@amsmath@err{Extra & on this line}%
  1267.                 {\the\andhelp@}% "An extra & here is disastrous"
  1268.             \endgroup
  1269.         \else
  1270.             \global\maxfields@\column@
  1271.         \fi
  1272.     \fi
  1273.     \setboxz@h{\@lign\strut@{%
  1274.         \if@eqnsw
  1275.             \stepcounter{equation}%
  1276.             \tagform@\theequation
  1277.         \else
  1278.             \iftag@\df@tag\fi
  1279.         \fi
  1280.     }}%
  1281.     \savetaglength@
  1282.     \ifst@rred\else\global\@eqnswtrue\fi
  1283.     \cr
  1284. \let\field@lengths\@empty
  1285. \def\savefieldlength@{%
  1286.     \begingroup
  1287.         \let\or\relax
  1288.         \xdef\field@lengths{%
  1289.             \field@lengths
  1290.             \ifnum\column@=0
  1291.                 \or
  1292.             \else
  1293.                 ,%
  1294.             \fi
  1295.             \the\wdz@
  1296.         }%
  1297.     \endgroup
  1298. \def\fieldlengths@#1{%
  1299.     \ifcase\@xp#1\field@lengths\fi
  1300. \let\maxcolumn@widths\@empty
  1301. \def\maxcol@width#1{%
  1302.     \ifcase\@xp#1\maxcolumn@widths\fi\relax
  1303. \def\measure@#1{%
  1304.     \begingroup
  1305.         \measuring@true
  1306.         \eqnshift@\z@
  1307.         \alignsep@\z@
  1308.         \global\let\tag@lengths\@empty
  1309.         \global\let\field@lengths\@empty
  1310.         \savecounters@
  1311.         \global\setbox0\vbox{%
  1312.             \let\math@cr@@@\math@cr@@@align@measure
  1313.             \everycr{\noalign{\global\tag@false
  1314.               \global\let\raise@tag\@empty \global\column@\z@}}%
  1315.             \let\label\@gobble
  1316.             \global\row@\z@
  1317.             \tabskip\z@
  1318.             \halign{\span\align@preamble\crcr
  1319.                 #1%
  1320.                 \math@cr@@@
  1321.                 \column@\z@
  1322.                 \add@amps\maxfields@\cr
  1323.             }%
  1324.         }%
  1325.         \restorecounters@
  1326.         \ifodd\maxfields@
  1327.             \global\advance\maxfields@\@ne
  1328.         \fi
  1329.         \ifnum\xatlevel@=\tw@
  1330.             \ifnum\maxfields@<\thr@@
  1331.                 \let\xatlevel@\z@
  1332.             \fi
  1333.         \fi
  1334.         \setbox0\vbox{%
  1335.             \unvbox0
  1336.             \unpenalty
  1337.             \global\setbox1\lastbox
  1338.         }%
  1339.         \global\totwidth@\wd1
  1340.         \if@fleqn
  1341.            \global\advance\totwidth@\@mathmargin
  1342.         \fi
  1343.         \global\let\maxcolumn@widths\@empty
  1344.         \begingroup
  1345.             \let\or\relax
  1346.             \loop
  1347.                \setbox1\hbox{%
  1348.                    \unhbox1
  1349.                    \unskip
  1350.                    \global\setbox0\lastbox
  1351.                }%
  1352.                 \ifhbox0
  1353.                     \xdef\maxcolumn@widths{ \or \the\wd0 \maxcolumn@widths}%
  1354.             \repeat
  1355.         \endgroup
  1356.         \dimen@\displaywidth
  1357.         \advance\dimen@-\totwidth@
  1358.         \ifcase\xatlevel@
  1359.             \global\alignsep@\z@
  1360.             \let\minalignsep\z@
  1361.             \@tempcntb\z@
  1362.             \if@fleqn
  1363.                 \@tempcnta\@ne
  1364.                 \global\eqnshift@\@mathmargin
  1365.             \else
  1366.                 \@tempcnta\tw@
  1367.                 \global\eqnshift@\dimen@
  1368.                 \global\divide\eqnshift@\@tempcnta
  1369.             \fi
  1370.         \or
  1371.             \@tempcntb\maxfields@
  1372.             \divide\@tempcntb\tw@
  1373.             \@tempcnta\@tempcntb
  1374.             \advance\@tempcntb\m@ne
  1375.             \if@fleqn
  1376.                 \global\eqnshift@\@mathmargin
  1377.                 \alignsep@\dimen@
  1378.                 \global\divide\alignsep@\@tempcnta
  1379.             \else
  1380.                 \global\advance\@tempcnta\@ne
  1381.                 \global\eqnshift@\dimen@
  1382.                 \global\divide\eqnshift@\@tempcnta
  1383.                 \global\alignsep@\eqnshift@
  1384.             \fi
  1385.         \or
  1386.             \@tempcntb\maxfields@
  1387.             \divide\@tempcntb\tw@
  1388.             \global\advance\@tempcntb\m@ne
  1389.             \global\@tempcnta\@tempcntb
  1390.             \global\eqnshift@\z@
  1391.             \global\alignsep@\dimen@
  1392.             \if@fleqn
  1393.                 \advance\alignsep@\@mathmargin\relax
  1394.             \fi
  1395.             \global\divide\alignsep@\@tempcntb
  1396.         \fi
  1397.         \ifdim\alignsep@<\minalignsep\relax
  1398.             \global\alignsep@\minalignsep\relax
  1399.             \ifdim\eqnshift@>\z@
  1400.                 \if@fleqn\else
  1401.                     \eqnshift@\displaywidth
  1402.                     \advance\eqnshift@-\totwidth@
  1403.                     \advance\eqnshift@-\@tempcntb\alignsep@
  1404.                     \global\divide\eqnshift@\tw@
  1405.                 \fi
  1406.             \fi
  1407.         \fi
  1408.         \ifdim\eqnshift@<\z@
  1409.             \global\eqnshift@\z@
  1410.         \fi
  1411.         \calc@shift@align
  1412.         \tagshift@\totwidth@
  1413.         \advance\tagshift@\@tempcntb\alignsep@
  1414.         \if@fleqn
  1415.             \ifnum\xatlevel@=\tw@
  1416.                 \global\advance\tagshift@-\@mathmargin\relax
  1417.             \fi
  1418.         \else
  1419.             \global\advance\tagshift@\eqnshift@
  1420.         \fi
  1421.         \iftagsleft@ \else
  1422.             \global\advance\tagshift@-\displaywidth
  1423.         \fi
  1424.         \dimen@\minalignsep\relax
  1425.         \advance\totwidth@\@tempcntb\dimen@
  1426.         \ifdim\totwidth@>\displaywidth
  1427.             \global\let\displaywidth@\totwidth@
  1428.         \else
  1429.             \global\let\displaywidth@\displaywidth
  1430.         \fi
  1431.     \endgroup
  1432. \iftagsleft@\if@fleqn
  1433.     \def\calc@shift@align{%
  1434.         \global\let\tag@shifts\@empty
  1435.         \begingroup
  1436.             \@tempdima\@mathmargin\relax
  1437.             \advance\@tempdima-\mintagsep\relax
  1438.             \loop
  1439.                 \ifnum\row@>0
  1440.                     \ifdim\tag@width\row@>\z@
  1441.                         \x@calc@shift@lf
  1442.                     \else
  1443.                         \saveshift@0%
  1444.                     \fi
  1445.                     \advance\row@\m@ne
  1446.             \repeat
  1447.         \endgroup
  1448.     }
  1449.     \def\x@calc@shift@lf{%
  1450.         \ifdim\eqnshift@=\z@
  1451.             \global\eqnshift@\@mathmargin\relax
  1452.             \alignsep@\displaywidth
  1453.             \advance\alignsep@-\totwidth@
  1454.             \global\divide\alignsep@\@tempcntb
  1455.             \ifdim\alignsep@<\minalignsep\relax
  1456.                 \global\alignsep@\minalignsep\relax
  1457.             \fi
  1458.         \fi
  1459.         \ifdim\tag@width\row@>\@tempdima
  1460.             \saveshift@1%
  1461.         \else
  1462.             \saveshift@0%
  1463.         \fi
  1464.     }
  1465. \fi\fi
  1466. \iftagsleft@\else\if@fleqn
  1467.     \def\calc@shift@align{%
  1468.         \global\let\tag@shifts\@empty
  1469.         \begingroup
  1470.             \loop
  1471.                 \ifnum\row@>0
  1472.                     \ifdim\tag@width\row@>\z@
  1473.                         \x@calc@shift@rf
  1474.                     \else
  1475.                         \saveshift@0%
  1476.                     \fi
  1477.                     \advance\row@\m@ne
  1478.             \repeat
  1479.         \endgroup
  1480.     }
  1481.     \def\x@calc@shift@rf{%
  1482.         \column@\z@
  1483.         \@tempdimb\z@
  1484.         \@tempdimc\z@
  1485.         \edef\@tempb{\fieldlengths@\row@}%
  1486.         \@for\@tempa:=\@tempb\do{%
  1487.             \advance\column@\@ne
  1488.             \x@rcalc@width
  1489.         }%
  1490.         \begingroup
  1491.             \advance\column@\m@ne
  1492.             \divide\column@\tw@
  1493.             \ifnum\@tempcntb>\column@
  1494.                 \advance\@tempcnta-\@tempcntb
  1495.                 \advance\@tempcnta\column@
  1496.                 \@tempcntb\column@
  1497.             \fi
  1498.             \tagwidth@\tag@width\row@\relax
  1499.             \@tempdima\eqnshift@
  1500.             \advance\@tempdima\@tempdimc\relax
  1501.             \advance\@tempdima\tagwidth@
  1502.             \dimen@\minalignsep\relax
  1503.             \multiply\dimen@\@tempcntb
  1504.             \advance\dimen@\mintagsep\relax
  1505.             \advance\dimen@\@tempdima
  1506.             \ifdim\dimen@>\displaywidth
  1507.                 \saveshift@1%
  1508.             \else
  1509.                 \saveshift@0%
  1510.                 \dimen@\alignsep@\relax
  1511.                 \multiply\dimen@\@tempcntb
  1512.                 \advance\dimen@\@tempdima
  1513.                 \advance\dimen@\tagwidth@
  1514.                 \ifdim\dimen@>\displaywidth
  1515.                     \dimen@\displaywidth
  1516.                     \advance\dimen@-\@tempdima
  1517.                     \ifnum\xatlevel@=\tw@
  1518.                         \advance\dimen@-\mintagsep\relax
  1519.                     \fi
  1520.                     \divide\dimen@\@tempcnta
  1521.                     \ifdim\dimen@<\minalignsep\relax
  1522.                         \global\alignsep@\minalignsep\relax
  1523.                     \else
  1524.                         \global\alignsep@\dimen@
  1525.                     \fi
  1526.                 \fi
  1527.             \fi
  1528.         \endgroup
  1529.     }
  1530. \fi\fi
  1531. \iftagsleft@\else\if@fleqn\else
  1532.     \def\calc@shift@align{%
  1533.         \global\let\tag@shifts\@empty
  1534.         \begingroup
  1535.             \loop
  1536.                 \ifnum\row@>0
  1537.                     \ifdim\tag@width\row@>\z@
  1538.                         \x@calc@shift@rc
  1539.                     \else
  1540.                         \saveshift@0%
  1541.                     \fi
  1542.                     \advance\row@\m@ne
  1543.             \repeat
  1544.         \endgroup
  1545.     }
  1546.     \def\x@calc@shift@rc{%
  1547.         \column@\z@
  1548.         \@tempdimb\z@
  1549.         \@tempdimc\z@
  1550.         \edef\@tempb{\fieldlengths@\row@}%
  1551.         \@for\@tempa:=\@tempb\do{%
  1552.             \advance\column@\@ne
  1553.             \x@rcalc@width
  1554.         }%
  1555.         \begingroup
  1556.             \advance\column@\m@ne
  1557.             \divide\column@\tw@
  1558.             \ifnum\@tempcntb>\column@
  1559.                 \advance\@tempcnta-\@tempcntb
  1560.                 \advance\@tempcnta\column@
  1561.                 \@tempcntb\column@
  1562.             \fi
  1563.             \tagwidth@\tag@width\row@\relax
  1564.             \@tempdima\@tempdimc
  1565.             \advance\@tempdima\tagwidth@
  1566.             \dimen@\minalignsep\relax
  1567.             \multiply\dimen@\@tempcntb
  1568.             \advance\dimen@\mintagsep\relax
  1569.             \ifnum\xatlevel@=\tw@ \else
  1570.                 \advance\dimen@\mintagsep\relax
  1571.             \fi
  1572.             \advance\dimen@\@tempdima
  1573.             \ifdim\dimen@>\displaywidth
  1574.                 \saveshift@1%
  1575.             \else
  1576.                 \saveshift@0%
  1577.                 \dimen@\eqnshift@
  1578.                 \advance\dimen@\@tempdima
  1579.                 \advance\dimen@\@tempcntb\alignsep@
  1580.                 \advance\dimen@\tagwidth@
  1581.                 \ifdim\dimen@>\displaywidth
  1582.                     \dimen@\displaywidth
  1583.                     \advance\dimen@-\@tempdima
  1584.                     \ifnum\xatlevel@=\tw@
  1585.                         \advance\dimen@-\mintagsep\relax
  1586.                     \fi
  1587.                     \divide\dimen@\@tempcnta
  1588.                     \ifdim\dimen@<\minalignsep\relax
  1589.                         \global\alignsep@\minalignsep\relax
  1590.                         \eqnshift@\displaywidth
  1591.                         \advance\eqnshift@-\@tempdima
  1592.                         \advance\eqnshift@-\@tempcntb\alignsep@
  1593.                         \global\divide\eqnshift@\tw@
  1594.                     \else
  1595.                         \ifdim\dimen@<\eqnshift@
  1596.                             \ifdim\dimen@<\z@
  1597.                                 \global\eqnshift@\z@
  1598.                             \else
  1599.                                 \global\eqnshift@\dimen@
  1600.                             \fi
  1601.                         \fi
  1602.                         \ifdim\dimen@<\alignsep@
  1603.                             \global\alignsep@\dimen@
  1604.                         \fi
  1605.                     \fi
  1606.                 \fi
  1607.             \fi
  1608.         \endgroup
  1609.     }
  1610. \fi\fi
  1611. \iftagsleft@\else
  1612.     \def\x@rcalc@width{%
  1613.         \ifdim\@tempa > \z@
  1614.             \advance\@tempdimc\@tempdimb
  1615.             \ifodd\column@
  1616.                 \advance\@tempdimc\maxcol@width\column@
  1617.                 \@tempdimb\z@
  1618.             \else
  1619.                 \advance\@tempdimc\@tempa\relax
  1620.                 \@tempdimb\maxcol@width\column@
  1621.                 \advance\@tempdimb-\@tempa\relax
  1622.             \fi
  1623.         \else
  1624.             \advance\@tempdimb\maxcol@width\column@\relax
  1625.         \fi
  1626.     }
  1627. \iftagsleft@\if@fleqn\else
  1628.     \def\calc@shift@align{%
  1629.         \global\let\tag@shifts\@empty
  1630.         \begingroup
  1631.             \loop
  1632.                 \ifnum\row@>\z@
  1633.                     \ifdim\tag@width\row@>\z@
  1634.                         \x@calc@shift@lc
  1635.                     \else
  1636.                         \saveshift@0%
  1637.                     \fi
  1638.                     \advance\row@\m@ne
  1639.             \repeat
  1640.         \endgroup
  1641.     }
  1642.     \def\x@calc@shift@lc{%
  1643.         \column@\z@
  1644.         \@tempdima\z@ % ``width of equation''
  1645.         \@tempdimb\z@ % ``indent of equation''
  1646.         \edef\@tempb{\fieldlengths@\row@}%
  1647.         \@for\@tempa:=\@tempb\do{%
  1648.             \advance\column@\@ne
  1649.             \x@lcalc@width
  1650.         }%
  1651.         \begingroup
  1652.             \tagwidth@\tag@width\row@\relax
  1653.             \@tempdima\totwidth@
  1654.             \advance\@tempdima-\@tempdimb
  1655.             \advance\@tempdima\tagwidth@
  1656.             \dimen@\minalignsep\relax
  1657.             \multiply\dimen@\@tempcntb
  1658.             \advance\dimen@\mintagsep\relax
  1659.             \ifnum\xatlevel@=\tw@ \else
  1660.                 \advance\dimen@\mintagsep\relax
  1661.             \fi
  1662.             \advance\dimen@\@tempdima
  1663.             \ifdim\dimen@>\displaywidth
  1664.                 \saveshift@1%
  1665.             \else
  1666.                 \saveshift@0%
  1667.                 \dimen@\alignsep@
  1668.                 \multiply\dimen@\count@
  1669.                 \advance\dimen@\eqnshift@
  1670.                 \advance\dimen@\@tempdimb
  1671.                 \ifdim\dimen@<2\tagwidth@
  1672.                     \dimen@\displaywidth
  1673.                     \advance\dimen@-\@tempdima
  1674.                     \ifnum\xatlevel@=\tw@
  1675.                         \advance\dimen@-\mintagsep\relax
  1676.                     \fi
  1677.                     \divide\dimen@\@tempcnta
  1678.                     \ifdim\dimen@<\minalignsep\relax
  1679.                         \global\alignsep@\minalignsep\relax
  1680.                         \dimen@\displaywidth
  1681.                         \advance\dimen@-\@tempdima
  1682.                         \advance\dimen@-\@tempcntb\alignsep@
  1683.                         \global\divide\dimen@\tw@
  1684.                     \else
  1685.                         \ifdim\dimen@<\alignsep@
  1686.                             \global\alignsep@\dimen@
  1687.                         \fi
  1688.                     \fi
  1689.                     \ifnum\xatlevel@=\tw@
  1690.                         \dimen@\mintagsep\relax
  1691.                     \fi
  1692.                     \advance\dimen@\tagwidth@
  1693.                     \advance\dimen@-\@tempdimb
  1694.                     \advance\dimen@-\count@\alignsep@
  1695.                     \ifdim\dimen@>\eqnshift@
  1696.                         \global\eqnshift@\dimen@
  1697.                     \fi
  1698.                 \fi
  1699.             \fi
  1700.         \endgroup
  1701.     }
  1702.     \def\x@lcalc@width{%
  1703.         \ifdim\@tempdima = \z@
  1704.             \ifdim\@tempa > \z@
  1705.                 \@tempdima\p@
  1706.                 \ifodd\column@
  1707.                     \advance\@tempdimb \maxcol@width\column@
  1708.                     \advance\@tempdimb-\@tempa
  1709.                 \fi
  1710.                 \count@\column@
  1711.                 \advance\count@\m@ne
  1712.                 \divide\count@\tw@
  1713.                 \advance\@tempcnta-\count@
  1714.                 \advance\@tempcntb-\count@
  1715.             \else
  1716.                 \advance\@tempdimb \maxcol@width\column@\relax
  1717.             \fi
  1718.         \fi
  1719.     }
  1720. \fi\fi
  1721. \def\place@tag{%
  1722.     \iftagsleft@
  1723.         \kern-\tagshift@
  1724.         \if1\shift@tag\row@\relax
  1725.             \rlap{\vbox{%
  1726.                 \normalbaselines
  1727.                 \boxz@
  1728.                 \vbox to\lineht@{}%
  1729.                 \raise@tag
  1730.             }}%
  1731.         \else
  1732.             \rlap{\boxz@}%
  1733.         \fi
  1734.         \kern\displaywidth@
  1735.     \else
  1736.         \kern-\tagshift@
  1737.         \if1\shift@tag\row@\relax
  1738.             \llap{\vtop{%
  1739.                 \raise@tag
  1740.                 \normalbaselines
  1741.                 \setbox\@ne\null
  1742.                 \dp\@ne\lineht@
  1743.                 \box\@ne
  1744.                 \boxz@
  1745.             }}%
  1746.         \else
  1747.             \llap{\boxz@}%
  1748.         \fi
  1749.     \fi
  1750. \def\align@preamble{%
  1751.    &\hfil
  1752.     \strut@
  1753.     \setboxz@h{\@lign$\m@th\displaystyle{##}$}%
  1754.     \ifmeasuring@\savefieldlength@\fi
  1755.     \set@field
  1756.     \tabskip\z@skip
  1757.    &\setboxz@h{\@lign$\m@th\displaystyle{{}##}$}%
  1758.     \ifmeasuring@\savefieldlength@\fi
  1759.     \set@field
  1760.     \hfil
  1761.     \tabskip\alignsep@
  1762. \def\set@field{%
  1763.     \column@plus
  1764.     \iftagsleft@
  1765.         \ifdim\ht\z@>\lineht@
  1766.             \global\lineht@\ht\z@
  1767.         \fi
  1768.     \else
  1769.         \ifdim\dp\z@>\lineht@
  1770.             \global\lineht@\dp\z@
  1771.         \fi
  1772.     \fi
  1773.     \boxz@
  1774. \def\split{%
  1775.     \ifinany@
  1776.         \@xp\insplit@
  1777.     \else
  1778.         \@xp\split@err
  1779.     \fi
  1780. \edef\split@err{%
  1781.     \@nx\@amsmath@err{%
  1782.         \string\begin{split} won't work here%
  1783.     }{%
  1784.         \@xp\@nx\csname
  1785.   Did you forget a preceding \string\begin{equation}?^^J%
  1786.   If not, perhaps the `aligned' environment is what you want.\endcsname}%
  1787. \def\insplit@{%
  1788.     \global\setbox\z@\vbox\bgroup
  1789.         \Let@
  1790.         \restore@math@cr
  1791.         \default@tag % disallow use of \tag here
  1792.         \ialign\bgroup
  1793.             \hfil
  1794.             \strut@
  1795.             $\m@th\displaystyle{##}$%
  1796.            &$\m@th\displaystyle{{}##}$%
  1797.             \hfill % Why not \hfil?---dmj, 1994/12/28
  1798.             \crcr
  1799. \def\endsplit{%
  1800.             \crcr
  1801.         \egroup
  1802.     \egroup
  1803.     \iftagsleft@
  1804.         \@xp\lendsplit@
  1805.     \else
  1806.         \@xp\rendsplit@
  1807.     \fi
  1808. \def\rendsplit@{%
  1809.     \ifinalign@
  1810.         \global\setbox9 \vtop{%
  1811.             \unvcopy\z@
  1812.             \global\setbox8 \lastbox
  1813.             \unskip
  1814.         }%
  1815.         \setbox\@ne\hbox{%
  1816.             \unhcopy8
  1817.             \unskip
  1818.             \global\setbox\tw@\lastbox
  1819.             \unskip
  1820.             \global\setbox\thr@@\lastbox
  1821.         }%
  1822.         \ifctagsplit@
  1823.             \gdef\split@{%
  1824.                 \hbox to\wd\thr@@{}%
  1825.                &\vcenter{\vbox{\moveleft\wd\thr@@\boxz@}}%
  1826.             }%
  1827.         \else
  1828.             \global\setbox7 \hbox{\unhbox\tw@\unskip}%
  1829.             \gdef\split@{%
  1830.                 \global\@tempcnta\column@
  1831.                &\setboxz@h{}%
  1832.                 \savetaglength@
  1833.                 \global\advance\row@\@ne
  1834.                 \vbox{\moveleft\wd\thr@@\box9}%
  1835.                 \crcr
  1836.                 \noalign{\global\lineht@\z@}%
  1837.                 \add@amps\@tempcnta
  1838.                 \box\thr@@
  1839.                &\box7
  1840.             }%
  1841.         \fi
  1842.     \else
  1843.         \ifctagsplit@
  1844.             \gdef\split@{\vcenter{\boxz@}}%
  1845.         \else
  1846.             \gdef\split@{%
  1847.                 \boxz@
  1848.             }%
  1849.         \fi
  1850.     \fi
  1851.     \aftergroup\split@
  1852. \def\lendsplit@{%
  1853.     \global\setbox9\vtop{\unvcopy\z@}%
  1854.     \ifinalign@
  1855.         \setbox\@ne\vbox{%
  1856.             \unvcopy\z@
  1857.             \global\setbox8\lastbox
  1858.         }%
  1859.         \setbox\@ne\hbox{%
  1860.             \unhcopy8%
  1861.             \unskip
  1862.             \setbox\tw@\lastbox
  1863.             \unskip
  1864.             \global\setbox\thr@@\lastbox
  1865.         }%
  1866.         \ifctagsplit@
  1867.             \gdef\split@{%
  1868.                 \hbox to\wd\thr@@{}%
  1869.                &\vcenter{\vbox{\moveleft\wd\thr@@\box9}}%
  1870.             }%
  1871.         \else
  1872.             \gdef\split@{%
  1873.                 \hbox to\wd\thr@@{}%
  1874.                &\vbox{\moveleft\wd\thr@@\box9}%
  1875.             }%
  1876.         \fi
  1877.     \else
  1878.         \ifctagsplit@
  1879.             \gdef\split@{\vcenter{\box9}}%
  1880.         \else
  1881.             \gdef\split@{\box9}%
  1882.         \fi
  1883.     \fi
  1884.     \aftergroup\split@
  1885. \newskip\multlinegap
  1886. \multlinegap10pt
  1887. \newskip\multlinetaggap
  1888. \multlinetaggap10pt
  1889. \def\start@multline#1{%
  1890.     \RIfM@
  1891.         \nomath@env
  1892.         \DN@{\@namedef{end\@currenvir}{}\@gobble}%
  1893.     \else
  1894.         $$%
  1895.         #1%
  1896.         \ifst@rred
  1897.             \nonumber
  1898.         \else
  1899.             \global\@eqnswtrue
  1900.         \fi
  1901.         \let\next@\multline@
  1902.     \fi
  1903.     \collect@body\next@
  1904. \def\multline{\start@multline\st@rredfalse}
  1905. \@namedef{multline*}{\start@multline\st@rredtrue}
  1906. \def\multline@#1{%
  1907.     \inany@true
  1908.     \Let@
  1909.     \@display@init{\global\advance\row@\@ne \global\dspbrk@lvl\m@ne}%
  1910.     \displaybreak@
  1911.     \restore@math@cr
  1912.     \let\tag\tag@in@align
  1913.     \global\tag@false \global\let\raise@tag\@empty
  1914.     \mmeasure@{#1}%
  1915.     \let\tag\gobble@tag \let\label\@gobble
  1916.     \tabskip \if@fleqn \@mathmargin \else \z@skip \fi
  1917.     \totwidth@\displaywidth
  1918.     \if@fleqn
  1919.         \advance\totwidth@-\@mathmargin
  1920.     \fi
  1921.     \halign\bgroup
  1922.         \hbox to\totwidth@{%
  1923.             \if@fleqn
  1924.                 \hskip \@centering \relax
  1925.             \else
  1926.                 \hfil
  1927.             \fi
  1928.             \strut@
  1929.             $\m@th\displaystyle{}##$%
  1930.             \hfil
  1931.         }%
  1932.         \crcr
  1933.         \if@fleqn
  1934.             \hskip-\@mathmargin
  1935.         \else
  1936.             \hfilneg
  1937.         \fi
  1938.         \iftagsleft@
  1939.             \iftag@
  1940.                 \begingroup
  1941.                     \ifshifttag@
  1942.                         \rlap{\vbox{%
  1943.                                 \normalbaselines
  1944.                                 \hbox{%
  1945.                                     \strut@
  1946.                                     \make@display@tag
  1947.                                 }%
  1948.                                 \vbox to\lineht@{}%
  1949.                                 \raise@tag
  1950.                         }}%
  1951.                         \hskip\multlinegap
  1952.                     \else
  1953.                         \make@display@tag
  1954.                         \hskip\multlinetaggap
  1955.                     \fi
  1956.                 \endgroup
  1957.             \else
  1958.                 \hskip\multlinegap
  1959.             \fi
  1960.         \else
  1961.             \hskip\multlinegap
  1962.         \fi
  1963.     #1%
  1964. \def\endmultline{%
  1965.     \iftagsleft@
  1966.         \@xp\lendmultline@
  1967.     \else
  1968.         \@xp\rendmultline@
  1969.     \fi
  1970.     \global\@ignoretrue
  1971. \@xp\let\csname endmultline*\endcsname=\endmultline
  1972. \def\lendmultline@{%
  1973.         \hfilneg
  1974.         \hskip\multlinegap
  1975.         \math@cr
  1976.     \egroup
  1977.     $$%
  1978. \def\rendmultline@{%
  1979.     \iftag@
  1980.         \begingroup
  1981.             \ifshifttag@
  1982.                 \hskip\multlinegap
  1983.                 \llap{\vtop{%
  1984.                     \raise@tag
  1985.                     \normalbaselines
  1986.                     \setbox\@ne\null
  1987.                     \dp\@ne\lineht@
  1988.                     \box\@ne
  1989.                     \hbox{\strut@\make@display@tag}%
  1990.                 }}%
  1991.             \else
  1992.                 \hskip\multlinetaggap
  1993.                 \make@display@tag
  1994.             \fi
  1995.         \endgroup
  1996.     \else
  1997.         \hskip\multlinegap
  1998.     \fi
  1999.     \hfilneg
  2000.         \math@cr
  2001.     \egroup$$%
  2002. \def\mmeasure@#1{%
  2003.     \begingroup
  2004.         \measuring@true
  2005.         \def\label##1{%
  2006.           \begingroup\measuring@false\label@in@display{##1}\endgroup}%
  2007.         \def\math@cr@@@{\cr}%
  2008.         \let\shoveleft\@iden \let\shoveright\@iden
  2009.         \savecounters@
  2010.         \global\row@\z@
  2011.         \setbox\@ne\vbox{%
  2012.             \global\let\df@tag\@empty
  2013.             \halign{%
  2014.                 \setboxz@h{\@lign$\m@th\displaystyle{}##$}%
  2015.                 \iftagsleft@
  2016.                     \ifnum\row@=\@ne
  2017.                         \global\totwidth@\wdz@
  2018.                         \global\lineht@\ht\z@
  2019.                     \fi
  2020.                 \else
  2021.                     \global\totwidth@\wdz@
  2022.                     \global\lineht@\dp\z@
  2023.                 \fi
  2024.                 \crcr
  2025.                 #1%
  2026.                 \crcr
  2027.             }%
  2028.         }%
  2029.         \ifx\df@tag\@empty\else\global\tag@true\fi
  2030.         \if@eqnsw\global\tag@true\fi
  2031.         \iftag@
  2032.             \setboxz@h{%
  2033.                 \if@eqnsw
  2034.                     \stepcounter{equation}%
  2035.                     \tagform@\theequation
  2036.                 \else
  2037.                     \df@tag
  2038.                 \fi
  2039.             }%
  2040.             \global\tagwidth@\wdz@
  2041.             \dimen@\totwidth@
  2042.             \advance\dimen@\tagwidth@
  2043.             \advance\dimen@\multlinetaggap
  2044.             \iftagsleft@\else
  2045.                 \if@fleqn
  2046.                     \advance\dimen@\@mathmargin
  2047.                 \fi
  2048.             \fi
  2049.             \ifdim\dimen@>\displaywidth
  2050.                 \global\shifttag@true
  2051.             \else
  2052.                 \global\shifttag@false
  2053.             \fi
  2054.         \fi
  2055.         \restorecounters@
  2056.     \endgroup
  2057. \iftagsleft@
  2058.     \def\shoveright#1{%
  2059.         #1%
  2060.         \hfilneg
  2061.         \hskip\multlinegap
  2062.     }
  2063. \else
  2064.     \def\shoveright#1{%
  2065.         #1%
  2066.         \hfilneg
  2067.         \iftag@
  2068.             \ifshifttag@
  2069.                 \hskip\multlinegap
  2070.             \else
  2071.                 \hskip\tagwidth@
  2072.                 \hskip\multlinetaggap
  2073.             \fi
  2074.         \else
  2075.             \hskip\multlinegap
  2076.         \fi
  2077.     }
  2078. \if@fleqn
  2079.     \def\shoveleft#1{#1}%
  2080. \else
  2081.     \iftagsleft@
  2082.         \def\shoveleft#1{%
  2083.             \setboxz@h{$\m@th\displaystyle{}#1$}%
  2084.             \setbox\@ne\hbox{$\m@th\displaystyle#1$}%
  2085.             \hfilneg
  2086.             \iftag@
  2087.                 \ifshifttag@
  2088.                     \hskip\multlinegap
  2089.                 \else
  2090.                     \hskip\tagwidth@
  2091.                     \hskip\multlinetaggap
  2092.                 \fi
  2093.             \else
  2094.                 \hskip\multlinegap
  2095.             \fi
  2096.             \hskip.5\wd\@ne
  2097.             \hskip-.5\wdz@
  2098.             #1%
  2099.         }
  2100.     \else
  2101.         \def\shoveleft#1{%
  2102.             \setboxz@h{$\m@th\displaystyle{}#1$}%
  2103.             \setbox\@ne\hbox{$\m@th\displaystyle#1$}%
  2104.             \hfilneg
  2105.             \hskip\multlinegap
  2106.             \hskip.5\wd\@ne
  2107.             \hskip-.5\wdz@
  2108.             #1%
  2109.         }
  2110.     \fi
  2111. \def\[{%
  2112.     \RIfM@
  2113.         \@badmath
  2114.     \else
  2115.         \DN@{%
  2116.             $$%
  2117.             \ingather@true
  2118.             \inany@true
  2119.             \def\\{\@amsmath@err{\Invalid@@\\}\@eha}%
  2120.             \tabskip\@mathmargin
  2121.             \halign to\displaywidth\bgroup
  2122.                 \if@fleqn\else\hfil\fi
  2123.                 \setboxz@h{$\m@th\displaystyle{####}$}%
  2124.                 \global\totwidth@\wdz@
  2125.                 \boxz@
  2126.                 \hfil
  2127.                 \tabskip\@centering
  2128.                 \cr
  2129.         }%
  2130.         \@xp\next@
  2131.     \fi
  2132. \def\]{%
  2133.     \RIfM@
  2134.         \DN@{%
  2135.                 \crcr
  2136.             \black@\totwidth@
  2137.             \egroup
  2138.             $$%
  2139.         }%
  2140.         \@xp\next@
  2141.     \else
  2142.         \@badmath
  2143.     \fi
  2144. \@xp\def\@xp\@arrayparboxrestore\@xp{\@arrayparboxrestore
  2145.   \inany@false\ingather@false\inalign@false \default@tag}
  2146. \def\equation{\gather\def\\{\@amsmath@err{\Invalid@@\\}\@eha}}
  2147. \def\endequation{\endgather}
  2148. \newenvironment{equation*}{%
  2149.   \equation
  2150.   \nonumber\endequation
  2151. \endinput
  2152. %% End of file `amsmath.sty'.
  2153.